Vector without repeated numbers in C

0

How do I load a vector, let the user enter all values, which can not have repeated numbers?

For example, a vector of 20 positions that asks the user to enter each value, and, when reporting a value equal to any previous one, a message would appear and it would be necessary to enter another value.

My code so far:

main()
{
    printf("Insira os dados do vetor A\n");

    for(i = 0; 20 > i; i++)
    {
        scanf("%d",va[i]);
        auxva = va[i];

        for(j = 0; 20 > j; j++)
        { 
            if (va[j] == auxva)
            {
                printf("Sem valores repetidos\n");
                scanf("%d",&auxva);
            }

            if(va[j] != auxva) 
                continue;
        } 
    } 
} 
    
asked by anonymous 11.05.2017 / 03:18

3 answers

1

You can do this:

#include <stdlib.h>
#include <stdio.h>

int exists(int *numbers, int size, int n) {
    for (register int i = 0; i < size; i++) {
        if (numbers[i] == n)
            return 1;
    }

    return 0;
}

void printArray(int *numbers, int size) {
    for (register int i = 0; i < size; i++)
        printf("%d ", numbers[i]);
    printf("\n");
}

int main(int argc, char *argv[]) {
    int size = 20;
    int *numbers = (int *) malloc(sizeof(int) * size);
    int count = 0;
    int n;

    while (count < size) {
        printf("Digite um número!\n");
        scanf("%d", &n);

        if (exists(numbers, size, n) == 0) {
            printf("Inserindo número no array\n");
            numbers[count] = n;
            count++;
        } else {
            printf("Número já existe\n");
        }
    }

    printf("O array é:\n");
    printArray(numbers, size);
}
    
11.05.2017 / 04:28
0
#include <stdio.h>

#define TAM_VETOR 5

int main()
{
    int vetor[TAM_VETOR] = {0};//zera tudo que tive la dentro
    int qtdInseridos = 0;//Quantos numeros ja foram inseridos
    int n;//valor que o cara coloca

    register int a;//contadores de loop


    for( ; qtdInseridos < TAM_VETOR; )
    {
        scanf("%d", &n);

        for(a = 0; a < qtdInseridos; a++)
            if( vetor[a] == n )
                break;

        if( a == qtdInseridos ) //passou por todo o for sem encontra nenhum numero igual a N, logo "a" é igual "qtdInseridos"
            vetor[qtdInseridos++] = n;
        else
            printf("Numero repetido.\n");

    }

    //Printa o vetor
    for(a = 0; a < TAM_VETOR; a++)
        printf("%d ", vetor[a]);
    printf("\n");

    return (0);
}
    
11.05.2017 / 04:40
0
//Codigo Simples
#include <stdio.h>

int main(){

    int i,j,n,vetor[20];

    int bandeira = 0;
    for(i = 0; i < 5; i++){
        scanf("%d", &n);
        //verifica se o numero digitato é igual a algum anterior
        for(j = 0; j <= i-1 ; j++){
            if(n == vetor[j]){
                bandeira = 1;
                //Caso encontre, a bandeira recebe 1 e o
                //"for" verificador é quebrado para economizar
                //processamento.
                break;
            }
        }
        //Se a bandeira é igual a 1, isso
        //significa que existe um numero igual
        if(bandeira == 1){
            printf("%d repetido \n", n);
            bandeira = 0;
            //A variavel "i" recebe menos 1, para garantir que o "i"
            // só vai referenciar a próxima posição do vetor quando o
            //usuário NÃO digitar um número repetido.
            //A bandeira é zerada para poder ser reutilizada.
            i -= 1;
        }else{
            //Caso não houver numero repetido, o numero é colocado
            //no vetor.
            vetor[i] = n;
        }
    }

    //Mostrar o vetor.

    for(i = 0; i < 5; i++){
        printf("%d ", vetor[i]);
    }

    return 0;
}
    
15.11.2017 / 21:06