Como esvaziar o buffer do scanf()?
Eaih galera...Como eh q fço pra esvaziah o buffer da função scanf?
Eh o seguinte...vou mostra um exemplo:
#include <stdio.h>
void visualizar();
void adicionar();
void main() {
char ch;
puts("o q vc quer fazer?");
puts("(a)dicionar um bareco");
puts("(v)izualizar um bareco");
scanf("%c",&ch);
switch(ch) {
case 'a': adicionar();
break;
case 'v': visualizar();
break;
default: break;
}
}
na função adicionar tem um printf() e depois pede para o usuario entrar com uma string e depois apertar ENTER. Aí q tá o problema. Parece q quando eu aperto ENTER no menu da função main(), ele parece q fica num buffer. Ele envia o ENTER direto para a função adicionar() fazendo com q o usuário não possa digitar a string(pois o gets da função adicionar() ja recebeu o ENTER.
Como q eu faço pra este ENTER não ser enviado para o gets() da função adicionar?
Como esvaziar o buffer do scanf()?
fala ai!
testa um:
fflush(stdin);
depois de ler o caracter (e antes de ler a string).
sei la.... so vendo de perto... mas a intençao do fflush(3) eh (+/-) essa.
falow.
Como esvaziar o buffer do scanf()?
aew cara....da uma olhada nisso...eu um lembro em q aula q ta...mas se nao me engano eh a funcao getchar();...apesar q o fflush(stdin); tbm deve de funciona...
http://www.linuxdicas.com.br/modules...icles&secid=24
:wink: :wink:
Como esvaziar o buffer do scanf()?
eu sempre uso o fflush(stdin) e funciona...
Como esvaziar o buffer do scanf()?
o fflush resolve.. mas se você fizer uma aplicação que grave dados em arquivos por exemplo, ao invéz de ficar dando fflush toda hora, você poderia fazer o seguinte:
setvbuf(fdHandle, NULL, _IONBF, 0);
fdHandle é o file-descriptor do arquivo.
NULL era pra ser o buffer, mas nesse caso nao é necessário.
_IONBF diz que não queremos bufferizar nada, ou seja, sem buffer streaming.
e o ultimo parametro, 0, é o tamanho do buffer, também não precisamos.
Mas preste atenção, isso faz com que TODAS OPERAÇÕES DE IO parem de fazer buffer-stream. Isso pode afetar a performance do sistema consideravelmente, principalmente se o processo é vital e consome muito processamento.
Como esvaziar o buffer do scanf()?
legal cara, essa eu não conhecia...