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

kanixe

erro no ciclo para correr o porgama outravez

3 mensagens neste tópico

       

while(1)
{


PROGRAMA

while(1)
        {
          printf("  Pretende realizar calculos mais uma vez?\n\n");
          printf("  1 - Sim\n");
          printf("  2 - Nao\n\n  ");
          scanf("%d",&r);
          printf("\n\n");
          
          if (r==1) {break;} else if (r==2) {exit(0);}
    
        }



}

Tenho este ciclo para quando chegar ao fim do programa, o utilzador poder escolher se quer voltar a correr ou sair. corre tudo bem quando responde numeros, o r é inteiro..mas quando responde uma letra, o ciclo repete-se indeterminadamente, escreve:

          printf("  Pretende realizar calculos mais uma vez?\n\n");
          printf("  1 - Sim\n");
          printf("  2 - Nao\n\n  ");

mas não pára para aceitar o valor lol.

help please

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nunca, ABSOLUTAMENTE nunca uses scanf() sem verificar o valor devolvido pela função.

O scanf() devolve-te o número de variáveis que foram alteradas com sucesso.

No teu caso só tens 1 variável (o r) e portanto o resultado do scanf() ou é 1 (o r foi alterado com sucesso) ou é 0 (houve um erro ao tentar actualizar r).

Se for 1 fazes o que já escreveste, se for 0 tratas o erro.

ATENÇÃO: ESTE É ESPECIFICAMENTE O TEU ERRO Quando o scanf() devolve 0 o "input stream" fica parado no caracter que deu erro. Quando respondes com uma letra, essa letra fica no input para sempre (ou até a tirares de lá no tratamento do erro).

if (scanf("%d", &r) != 1) {
  fprintf(stderr, "Impossivel converter input para inteiro. Programa abortado.\n");
  exit(EXIT_FAILURE);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nunca, ABSOLUTAMENTE nunca uses scanf() sem verificar o valor devolvido pela função.

O scanf() devolve-te o número de variáveis que foram alteradas com sucesso.

No teu caso só tens 1 variável (o r) e portanto o resultado do scanf() ou é 1 (o r foi alterado com sucesso) ou é 0 (houve um erro ao tentar actualizar r).

Se for 1 fazes o que já escreveste, se for 0 tratas o erro.

ATENÇÃO: ESTE É ESPECIFICAMENTE O TEU ERRO Quando o scanf() devolve 0 o "input stream" fica parado no caracter que deu erro. Quando respondes com uma letra, essa letra fica no input para sempre (ou até a tirares de lá no tratamento do erro).

if (scanf("%d", &r) != 1) {
  fprintf(stderr, "Impossivel converter input para inteiro. Programa abortado.\n");
  exit(EXIT_FAILURE);
}

Obrigado

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