Ir para conteúdo

POWERED BY:

Arquivado

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

sarcofagobra

Função getch()

Recommended Posts

Quando o programa pergunta

"Quanto eh 2 vezes 8? tecle ESC para sair\n

 

eu digito um valor qualquer e tenho que apertar o enter 2 vezes pra ele imprimir a próxima mensagem. Tem como eu tirar isso de alguma maneira?

#include <stdio.h>
#include<stdlib.h>


int main(){

   int n1, n2, resp, resultado=0, op, resp2;
   int i;

   while(op != 27)
{
   n1=1+rand()%10;
      n2=1+rand()%10;

      printf("Quanto eh %d vezes %d? <ESC para sair>", n1,n2);
      op=getch();
         if (op==27)
      	  	 exit(1);
      scanf("%d",&resp);


resultado=n1*n2;

   if(resultado==resp)
{
   printf("Muito bem! Para sair tecle ESC\n");
	   op=getch();
}

   else
{ 
     do
  {
        printf("Não. Tente novamente por favor tecle ESC para sair\n");
  	    op=getch();
  	      if (op==27)
 	        exit(1);
        printf("Quanto eh %d vezes %d tecle ESC para sair\n ", n1,n2);
        scanf("%d",&resp);
  		    op=getch();
   	      if (op==27)
 	         exit(1);
	 if(resp==resultado)
	 {
		printf("Muito bem! Para sair tecle ESC\n");
  		op=getch();
     }	

  		 if (op==27)
   	 	exit(1); 	
 }while(resp != resultado);
  }//FIM DO ELSE

}//FIM DO WHILE

getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

          if (op==27)
                exit(1);

 

Você deveria utilizar exit(0) aí...

 

 

Bom, provavelmente é a sugeira no buffer de entrada resultada pelo scanf(), estou com preguiça de ler seu código...

 

 

Veja se é..

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for sujeira no buffer, você resolve com um

 

fflush(stdin);

 

antes de fazer a próxima leitura.

 

Mas não acho que seja isso, geralmente sujeira do buffer faz ler a mais, e não de menos.

 

Talvez você esteja chamando o getch() em algum lugar como forma de "pausar" o programa, e ele acaba lendo assim mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá sekkuar!

 

Não, você não resolve com fflush(stdin), isso gera undefined behaviour e não deve ser utilizado em seu projeto.

 

 

Leia aqui para entender o porque de não usar: http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso acontece pois você esta usando primeiro um getch para decidir se a pessoa quer sair ou não do programa, e depois um scanf para encontrar a resposta.

 

Então desta maneira, obrigatoriamente, terá de apertar enter duas vezes.

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.