Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Aiakos

Programa executa 2 vezes.

Recommended Posts

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

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

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

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

Primeiro que C não inicializa variáveis.

 

Breakpoint 1, main () at t3.c:9

9 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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.