Cornelius 0 Denunciar post Postado Agosto 11, 2008 Olá a todos. estou com um problema num programinha que estou fazendo. Rodando o menu, na parte: Incluir > dados pessoais, o fgets não está funcionando. Testei a função sozinha e deu certo. Segue o código: #include <stdio.h> #include <stdlib.h> #include <string.h> struct aluno { char nome[15]; char codigo[4]; int nota[3]; }; struct aluno cadastro; int menu() //menu do programa { int esc; printf("\2 PROGRAMA DE CADASTRO DE ALUNOS \2\n"); printf("Digite a opção que deseja:\n1.Incluir\n2.calcular nota\n3.Limpar a tela\n4.sair\n"); scanf("%d",&esc); switch(esc) { case 1: incluir(); menu(); case 2: //mostrar(); //menu(); case 3: system("cls"); menu(); case 4: exit(0); break; default: printf("Opcao invalida\n"); } } /////////////////////////// int incluir() // { int esc; printf("Digte o que deseja cadastrar\n1.dados pessoais\n2.Notas\n3.Voltar\n"); scanf("%d",&esc); switch(esc) { case 1: incluir_nome(); system("cls"); incluir(); case 2: incluir_nota(); system("cls"); menu(); case 3: system("cls"); menu(); case 4: calc(); default: printf("opcao invalida\n"); } } int incluir_nome() { printf("Digite o nome\n"); fgets(cadastro.nome,15,stdin); } int incluir_nota() { int i; char cnome[15]; printf("Digite seu nome\n"); fgets(cnome,14,stdin); if(strcmp(cnome,cadastro.nome)) { for(i=1;i<4;i++) { printf("Digite a %d nota\n",i); scanf("%d",&cadastro.nota[i]); } } else { printf("Nome nao cadastrado.\n"); incluir(); } } int calc() //Função para calcular { int i,media=0; for(i=1;i<4;i++) { media+=cadastro.nota[i]; } media=media/3; media=calc(); printf("%s, sua media foi %d",cadastro.nome,media); printf("\n\n"); } int main() { menu(); system("pause"); } Obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 11, 2008 É o bendito buffer de entradas. Para corrigir voce pode fazer isso: int incluir() // { int esc; printf("Digte o que deseja cadastrar\n1.dados pessoais\n2.Notas\n3.Voltar\n"); scanf("%d",&esc); getchar(); Nesse caso o getchar retira o \n do buffer. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Cornelius 0 Denunciar post Postado Agosto 11, 2008 Tendi, funcionou, brigado Kandrade, agora só mais uma dúvida: O estouro de buffer aconteceu aqui? scanf("%d",&esc);Li que quando apertado "enter" depois da escolha ex: 1 e "enter", é lido 1\n, é isso mesmo? Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 11, 2008 Isso não é estouro de buffer. Voce está pedindo para o scanf ler um número inteiro e é isso que ele faz. O \n não faz parte do que voce pediu pra ler, então o \n fica no buffer. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Tendi, funcionou, brigado Kandrade, agora só mais uma dúvida: O estouro de buffer aconteceu aqui? scanf("%d",&esc);Li que quando apertado "enter" depois da escolha ex: 1 e "enter", é lido 1\n, é isso mesmo? Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Cornelius 0 Denunciar post Postado Agosto 13, 2008 beleza, Vlws kandrade http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 13, 2008 Foi nada. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif beleza, Vlws kandrade http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites