ASPER
UNIBRATEC

Problemas com SCANF, GETS e GETCH


Quando você utiliza, em um mesmo programa C. a função scanf, junto com as funções gets ou getch, encontra alguns problemas com a aparente "não execução" de uma ou mais das chamadas destas funções.

Perceba que o programa abaixo não tem problemas:

Ex1:
#include <stdio.h>
void main ()
{
    char Ch;
    Ch='\0';
    while (Ch!='q') {
        scanf("%c", &Ch);
    }
}


Porém o exemplo abaixo funciona de maneira estranha:
Ex2:
#include <stdio.h>
void main ()
{
    char Ch;
    Ch='\0';
    while (Ch!='q') {
        scanf("%c", &Ch);
        printf("Caractere digitado: %c",Ch);
    }
}

Dependendo do sistema operacional que voces está usando, haverá uma solução diferente para o problema.

Para o caso do ambientes DOS/UNIX, basta acrescentar, após o uso da scanf,  uma chamada à função fflush, na seguinte maneira:
 

void main()
{
..........
.........
........
.........
            scanf();
            fflush(stdin);
.......
.........
........
.........

            scanf();
            fflush(stdin);
.......
.......

}

Se voce estiver usando um ambiente LINUX, você deve chamar, após o uso da função scanf, a função flush_in descrita abaixo.
#include <stdio.h>

void flush_in()
{
   int ch;

   while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}
}

 

EX:


void main()
{
   int i=0;
   char op;

   i = 1; 
   while(i <= 3)
   {
      printf("\nDigite o Dado %d:",i);
      scanf("%c",&op);   // Le
      fflush(stdin);   // ou flush_in() no LINUX
      printf("Dado Lido: %c\n", op);
      i++;  // passa ao próximo
   }

}