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.
Dependendo do sistema operacional que voces está usando, haverá uma solução diferente para o problema.
Para o caso do ambientes DOS, usando o TCLite ou o BorlandC, basta acrescentar,
após o uso da scanf, uma chamada à função
fflush,
na seguinte maneira:
void main()Se voce estiver usando um ambiente UNIX/LINUX, você deve chamar, após o uso da função scanf, a função flush_in descrita abaixo.
{
..........
.........
........
.........
scanf(sdtin);
fflush(stdin);
.......
.........
........
.........scanf(sdtin);
fflush(stdin);
.......
.......}
#include <stdio.h>
// ******************************************// ******************************************
// Nome: void flush_in
// Descrição: Função que "limpa" o teclado
// evitando problemas com a leitura de dados
// do tipo CHAR.
// Código baseado em exemplo de
// Marco Aurélio Stelmar Netto
// [email protected]
// ******************************************
void flush_in()
{
int ch;while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}
}// ******************************************
// Programa principal
void main()
{
int i=0;
char op;i = 1; // inicializa o contador
while(i <= 3) // repete 3 vezes
{
printf("\nDigite o Dado %d:",i);
scanf("%c",&op); // Le
flush_in(); // Limpa o teclado
printf("Dado Lido: %c\n", op);
i++; // passa ao próximo
}}
Clique aqui para fazer download do arquivo-fonte
deste programa.