Aiakos 0 Denunciar post Postado Março 13, 2010 Bom. Eu não entendi o por que o programa exibe na tela 2x o "printf("\nGrande = A,\nMedia = B\nPequena = C\nPara o Programa = S\n")", e também não entendi por que a cada intereção ele sempre a exibe a condição de default. Pensei que ele somente executaria o default caso as condições não fossem atendidas. Segue o código: //usuario entra com um Caractere e o programa conta quantas vezes ele digitou o caractere e são apenas 3 caracteres para serem contados. #include <stdio.h> int main() { char CX, A, B, C, S; int S1, S2, S3, CG=0, CM=0, CP=0; INICIO: printf("\nGrande = A,\nMedia = B\nPequena = C\nPara o Programa = S\n"); CX = getchar(); switch (CX) // A cada "case" ele habilita os S1, S2, S3. { case 'A': S1=1, S2=1, S3=1; break; case 'B': S1=0, S2=1, S3=1; break; case 'C': S1=0, S2=0, S3=1; break; case 'S': printf("\nFim do Programa"); goto FIM; break; default: printf("\nParametros invalidos"); goto INICIO; } SOMA: //E a cada if ele vericafa a condição e faz o incremento if (S1==1 && S2==1 && S3==1) CG++; if (S1==0 && S2==1 && S3==1) CM++; if (S1==0 && S2==0 && S3==1) CP++; goto INICIO; FIM: printf("\nGrandes: %d\nMedias: %d\nPequenas: %d", CG, CM, CP); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Março 13, 2010 O goto INICIO responde porque ele executa duas vezes... Se duvidar, um \n pode ter ficado preso na entrada. Use um debugger p/ verificar isso, porque nem sempre quem responde os tópicos tem um compilador disponível p/ testar. Apesar de eu usar goto em certos casos, te digo que nesse programa não tem necessidade alguma disso. Use um loop. E até onde eu sei, o getchar retorna um inteiro, e não um char. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Março 13, 2010 Meu caro... Jogue esse código no lixo e refaça o seu programa. não se usa goto em C. (Com a exceção de casos extremos, e esse definitivamente não é um caso extremo) Reestruture o seu programa, use loops! E as coisas com certeza ficarão mais claras. Compartilhar este post Link para o post Compartilhar em outros sites
Aiakos 0 Denunciar post Postado Março 13, 2010 Obrigado Gente. Farei o código dinovo com loop e nada de goto qualquer coisa volto aki. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Aiakos 0 Denunciar post Postado Março 13, 2010 Bom refiz o programa tentei ser mais claro agora com a minha duvida. Neste exemplo não consigo entender o por que, com uma interação, ele executa duas vezes o printf. #include <stdio.h> #include <stdlib.h> int main() { char CX, A, B, C, S; int CG=0, CM=0, CP=0; while (CX!='S') { printf("\nGrande = A,\nMedia = B\nPequena = C\nPara o Programa = S\n"); scanf("%c", &CX); if (CX=='A') { CG++; } if (CX=='B') { CM++; } if (CX=='C') { CP++; } } printf("\nGrandes: %d\nMedias: %d\nPequenas: %d", CG, CM, CP); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Março 14, 2010 Primeiro que C não inicializa variáveis. Breakpoint 1, main () at t3.c:99 while (CX!='S') (gdb) display CX 1: CX = -73 '�' (gdb) c Continuing. Grande = A, Media = B Pequena = C Para o Programa = S Segundo: já falei num post anterior que um \n deve estar ficando preso na entrada: Grande = A,Media = B Pequena = C Para o Programa = S Breakpoint 1, main () at t3.c:12 12 scanf("%c", &CX); 1: CX = 67 'C' (gdb) s Breakpoint 2, main () at t3.c:14 14 if (CX=='A') 1: CX = 10 '\n' Aprenda a usar um debugger. Se o Dev C/C++ ou o Codeblocks não tem, troque de ide ou de sistema operacional. Compartilhar este post Link para o post Compartilhar em outros sites