Muita gente se pergunta: Porque meu getchar(); é ignorado? Estou tentando utilizar a função getchar() para pausar o programa ou para ler um único caractere, mas não está funcionando! Se eu utilizar dois getchar(), um após o outro, funciona... mas por quê?
Explicando:
Isso vai ocorrer quando o programa faz apenas uma ou mais leituras de teclado antes de chamar a função getchar(). Funções como scanf(), gets(), getline(), a classe std::cin e até mesmo getchar() só lêem do teclado os dados que lhes interessam, deixando no buffer de entrada qualquer coisa a mais. Por exemplo, o seguinte trecho de código:
scanf("%d", &num);
Isso vai ler do teclado somente os caracteres que fazem parte de um número inteiro. Fará com que um '\n', correspondente ao ENTER que o usuário pressiona depois de digitar o número, seja abandonado no buffer de entrada. Se a função getchar() for chamada, ela irá ler esse '\n' ao invés de esperar pelos próximos dados do usuário.
Solução em C
Acrescente um \n no final da string de leitura do scanf(). Como por exemplo:
scanf("%d\n", &num);
Isso fará com que o \n correspondente ao ENTER seja lido.
Também é altamente aconselhável que você abandone a função gets() e passe a usar a função fgets();.
E também aconselho que você troque a função getchar() por scanf("%c\n").
[5] Comentário enviado por WhiteHawk em 03/01/2012 - 09:15h
Boa dica!
@davimendes, a função "fflush" é específica para Windows, portanto ela não funciona no Linux. Se quiseres limpar o buffer no Linux, utilize a seguinte função: "__fpurge(stdin)".