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

kanixe

duvida - funcao para perguntar se deseja repetir

2 mensagens neste tópico

Esta funcao pergunta se o utilizador deseja repetir o programa. retorna 1 para repetir e 0 para depois sair do programa. Só que no windows isto esta tudo bem mas no linux aparece a primeira pergunta respondida automaticamente e "resposta invalida" e logo depois a pergunta feita normalmente. Que tenho que fazer? Já puz as funcoes fflush(stdin);  mas não deu nada.

int pergunta()
  {
    int resp;
    
    while(1)
     {
       fflush(stdin);    
       printf("\n\n  Escolha uma opcao:\n\n");
       printf("    1 - Gerar outra configuracao ");
       printf("com as mesmas caracteristicas.\n\n");      
       printf("    2 - Sair.\n\n");
       printf("  Resposta: ");              
       resp = getchar();
       fflush(stdin);
                   
       if (resp == '1') 
         return(1);        
       else if (resp == '2') 
         return(0); 
       else 
         printf("\n\n  Resposta invalida...\n\n");                          
     }                             
  }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema (como já foi descrito uma data de vezes aqui no fórum) é que o getchar() deixa o enter no buffer de entrada, e o resultado da chamada à função fflush() com streams de input não está definido pelo standard, e embora funcione com as implementações da biblioteca standard do C de alguns compiladores (nomeadamente a do Visual C++), noutros, como é o caso do gcc (que suponho que é o que estás a utilizar), não funciona.

Podes utilizar o scanf para limpar o buffer de entrada, como está descrito aqui, ou podes ler a string para um array de caracteres com fgets e utilizar o sscanf para obter o caracter que pretendes.

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