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
}
}
|