figboy Posted May 19, 2018 at 06:57 PM Report #610616 Posted May 19, 2018 at 06:57 PM 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. 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); }
Rui Carlos Posted May 20, 2018 at 04:08 PM Report #610620 Posted May 20, 2018 at 04:08 PM 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);. 1 Report Rui Carlos Gonçalves
figboy Posted May 20, 2018 at 06:15 PM Author Report #610621 Posted May 20, 2018 at 06:15 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now