• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

avernoro

pequena explicação

2 mensagens neste tópico

Tendo eu as seguintes funções

void Ping(int i)
{
switch(i)
{
   case 1: 
   case 2:
   case 3: while(i--)
                      printf("\n%d", --i);
                break;
   case 25: Pong(3);
                  break;
   default: printf("\nJa Passei a C");
                 Pong(123);
  }
}

void Pong(int x)
{
int j=0;
switch(x)
  {
     case 1:
     case 2: Ping(x);
     case 3: j=5;
                 J++;
                 return;
    default: printf("\nOla");
                 return;
}
printf("\nVou Sair");
}

Alguém me pode explicar porque é que o resultado de Pong(2) é 0?

e o de Pong(1) dá um ciclo infinito de números ímpares?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais começa por indentar o código, senão torna-se impossível ler o teu código...

Vou tentar explicar como é que o resultado de Pong(2) é 0.

Quando começas a função Pong, crias uma variável e fazes switch à variavel x (neste caso 2), seguindo para o caso case 2:, onde chamas a função Ping com o valor 2 como parâmetro.

Na função Ping, fazes switch à variável i, e passas para o caso case 2:. Como não tens nenhum break, a execução do programa passa para o próximo caso (case 3:).

No ciclo while, o valor de i é  a condição é verdadeira (valor > 0) e diminuis a variável i, ficando com o valor 1, e depois fazes um printf, sendo que a variável i é decrementada uma unidade antes de ser feito o seu output, neste caso 0.

De seguida fazes break, e terminas a execução do switch, a execução do programa volta para a função Pong, e como não tens um break, o controlo continua para o próximo caso (case 3:), dás o valor 5 à variavel j e ainda a incrementas uma unidade (deves ter-te enganado em J++, já que a variável não existe), acabando a execução da função com o return.

Quanto ao outro caso, espero que já consigas perceber depois de leres a minha explicação.

void Ping(int i)
{
    switch (i)
    {
        case 1:
        case 2:
        case 3:
            while (i--)
                printf("\n%d", --i);
            break;

        case 25:
            Pong(3);
            break;

        default:
            printf("\nJa Passei a C");
            Pong(123);
    }
}

void Pong(int x)
{
    int j=0;
    
    switch(x)
    {
        case 1:
        case 2: 
            Ping(x);

        case 3: 
            j=5;
            J++;
            return;
        
        default: 
            printf("\nOla");
            return;
    }
    
    printf("\nVou Sair");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora