Program does not execute when filling vector with random numbers not repeated in C

-1

I'm trying to get the random numbers to be generated and fill a vector in a separate function, but the program does not execute and hangs if I put a high, and not as high, number as 50 or 100. Below is my code , if anyone knows what's wrong help me there, pfv.

#include<time.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>

//variáveis globais
int tamanho = 0;

//links das funções
int menuPrincipal();
int retornaTamanho();
void preencheVetor(int tamanhoVetor, int *vetor);

int main(){
    setlocale(LC_ALL, "Portuguese");

    int opcao = 0, vetor[tamanho];

    do{
        opcao = menuPrincipal();

        switch(opcao){
        case 0:
            printf("\n ----------- APLICAÇÃO ENCERRADA! ----------- \n");
            exit(0);
            break;
        case 1:
            tamanho = retornaTamanho();

            printf("\n Tamanho do Vetor = %d \n", tamanho);

            preencheVetor(tamanho, vetor);

            break;
        default:
            printf("\n ----------- OPÇÃO INVÁLIDA ----------- \n\n");
            system("pause");
            system("cls");
            break;
        }
    }while(true);

    return 0;
}

int menuPrincipal(){
    int opcaoMenu = 0;

    printf("\n ------------ MENU ------------ \n");
    printf("\n ESCOLHA O MÉTODO DE ORDENAÇÃO: \n");
    printf("\n 1 - BUBBLE SORT \n");
    printf("\n 2 - SELECT SORT \n");
    printf("\n 3 - INSERT SORT \n");
    printf("\n 0 - SAIR \n");
    printf("\n DIGITE SUA OPÇÃO = ");
    scanf("%d", &opcaoMenu);

    system("cls");

    return opcaoMenu;
}

int retornaTamanho(){
    int opcaoTamanho = 0, valorTamanho = 0;

    printf("\n ------- TAMANHO DO VETOR -------- \n");
    printf("\n ESCOLHA O TAMANHO DO VETOR: \n");
    printf("\n 1 - 100 \n");
    printf("\n 2 - 10.000 \n");
    printf("\n 3 - 100.000 \n");
    printf("\n 4 - 1.000.000 \n");
    printf("\n 0 - VOLTAR \n");
    printf("\n DIGITE SUA OPÇÃO = ");
    scanf("%d", &opcaoTamanho);

    system("cls");

    switch(opcaoTamanho){
    case 0:
        main();
        break;
    case 1:
        valorTamanho = 100;
        break;
    case 2:
        valorTamanho = 10000;
        break;
    case 3:
        valorTamanho = 100000;
        break;
    case 4:
        valorTamanho = 1000000;
        break;
    default:
        retornaTamanho();
        break;
    }

    return valorTamanho;
}

void preencheVetor(int tamanhoVetor, int *vetor){
    int randomico = 0;

    bool numExistente = false;

    srand(time(NULL));

    for(int i = 0; i < tamanhoVetor; i++){

        randomico = (int) rand() % tamanhoVetor;

        for(int j = 0; j < i; j++){
            if(randomico == vetor[j]){
                numExistente = true;
                break;
            }
        }

        if(!numExistente){
            vetor[i] = randomico;
        }else{
            i--;
        }
    }
}
    
asked by anonymous 28.03.2017 / 12:50

1 answer

1

When you create a static vector (without using malloc or the like), its size is fixed at the time of creating the variable.

Try changing your code to something like this:

#define MAX 1000000
/* código omitido */

int main() {
    int vetor[MAX];
    /* o resto do código */
    return 0;
}

In this way, the vector will be created with the size MAX (one million) and there will be no problems with its size of the context of your code

    
28.03.2017 / 12:59