Function ends before asking for scanf value

0

Can anyone understand why, when in the acceptAllers function I call main (), main () does not execute the scan? That is, when I call again, main will not let me choose any options and will close the program soon. Thanks

void main(){

int j=0;
char opcao;

FILE *pedidos;

pedidos=fopen("../Projeto/Login/Users/pedidos", "r");


char leitor[100000];                             //listar o primeiro pedido de novo registo

    for(int i=0; i<5; i++){
        fgets(leitor,10000,pedidos);
        printf("%s", leitor);
    }
    printf("Pretende autorizar o registo deste utilizador? (y/n):");
    scanf("%c", &opcao);

    switch(opcao){
        case 'y':
        aceitarUtilizadores();
        break;
        case 'n':
        //rejeitarUtilizador();
        break;
    }


    }
void aceitarUtilizadores(){

char leitor[100];

FILE*ativos, *pedidos, *temp;

pedidos=fopen("../Projeto/Login/Users/pedidos", "r");

ativos=fopen("../Projeto/Login/Users/UserData", "a");

temp=fopen("../Projeto/Login/Users/temp", "w");

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

        fgets(leitor,100,pedidos);

        fputs(leitor,ativos);
    }

    while((fgets(leitor,100,pedidos))!=NULL){ //escreve os restantes pedidos para um ficheiro temporario
        fputs(leitor,temp);
    }
    fclose(pedidos);
    fclose(ativos);
    fclose(temp);
    temp=fopen("../Projeto/Login/Users/temp","r");
    pedidos=fopen("../Projeto/Login/Users/pedidos","w"); //abre o ficheiro dos pedidos apagando o seu conteudo

    while((fgets(leitor,100,temp))!=NULL){ //copia os pedidos que faltam ser analisados para o ficheiro de pedidos
        fputs(leitor,pedidos);
    }
    remove("../Projeto/Login/Users/temp");
    fclose(pedidos);
    pedidos=fopen("../Projeto/Login/Users/pedidos", "r");
    rewind(pedidos);
    system("clear");
    if((fgets(leitor,100,pedidos))!=NULL){
        fclose(pedidos);
        main();
    }



    fclose(pedidos);
}
    
asked by anonymous 19.05.2018 / 19:46

2 answers

0

Sometimes it gets a kind of "junk" in the keyboard buffer that is when you hit the enter, then when entering the next scanf it receives that enter again and for it it is as if it had already entered a value, to To solve you can use this line before scanf fflush(stdin); (in windows, in Linux it is another command, if I am not mistaken) or just give a space inside the quotation marks of scanf that also works: scanf(" %d", &seuInt); , by default I I always give this space within scanf so I do not need to use fflush , I use fflush just before getchar()

    
20.05.2018 / 02:26
0
printf("Pretende autorizar o registo deste utilizador? (y/n):");
scanf("%s", &opcao);

My friend recently had a problem similar to yours, I decided to change the scanf ("% c") to scanf ("% s").

It does not hurt to try there, good luck.

    
19.05.2018 / 22:08