Jump to content

Recommended Posts

Posted

Boa tarde a todos. Estou a fazer uma função em que para aceitar um utilizador copio a informação desse utilizador de um ficheiro para outro e queria fazer isso por blocos, ou seja, vejo a informação de um utilizador e respondo se quero aceitar ou não, e repito isto até não ter mais utilizadores. Mas quando vou ver a informação do segundo utilizador acontece alguma estranha que não estou a perceber o que é. Vou coloacar o link para a execução do programa, depois de imprimir a informação do segundo utilizador não sei o que acontece.

erro_zpsbsuy9d9f.webp.6206d2851cfdeb48e5

Se alguém conseguir ajudar fico muito grato

 

void main(){
int j=0;
char opcao;
FILE *pedidos;
pedidos=fopen("../Projeto/Login/Users/pedidos", "r");
char leitor[100000];
 
    while(k!=1){
 
                            //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;
    }
}
 
   
    }
   
int 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++){ //escreve os dados do utilizador para o ficheiro de UserData
        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);
   
    if((fgets(leitor,100,pedidos))==NULL){
        fclose(pedidos);
        return k=1;
       
    }
    fclose(pedidos);
   
}
Posted

Antes de mais, tenta indentar o código devidamente, caso contrário é difícil de ler.  Adicionalmente, não uses imagens para colocar conteúdos de texto!

Quanto ao problema, olhando rapidamente para o código, acho que podes ter problemas com "lixo" no buffer de leitura.  Experimenta trocar scanf("%c", &opcao); por scanf(" %c", &opcao);.

  • Vote 1
Posted
2 horas atrás, Rui Carlos disse:

Antes de mais, tenta indentar o código devidamente, caso contrário é difícil de ler.  Adicionalmente, não uses imagens para colocar conteúdos de texto!

Quanto ao problema, olhando rapidamente para o código, acho que podes ter problemas com "lixo" no buffer de leitura.  Experimenta trocar scanf("%c", &opcao); por scanf(" %c", &opcao);.

Era o lixo no buffer que me estava a causa problemas, como disseste para fazer já está a funcionar. Obrigado pela ajuda e pela dica de identar melhor o código

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.