Como eu limpo o buffer cin em C ++?
c++
cin
io-buffering
Dana the Sane
fonte
fonte
Eu preferiria as restrições de tamanho C ++ em vez das versões C:
fonte
cin
e usar a primeira instrução acima para liberar ocin
buffer, ele continuará solicitando a entrada até que eu entreEOF
pressionandoctrl+d
?Esta foi a única coisa que funcionou para mim ao ler do console. Em todos os outros casos, ele seria lido indefinidamente devido à falta de \ n ou algo permaneceria no buffer.
EDIT: Eu descobri que a solução anterior piorou as coisas. ESTE, entretanto, funciona:
fonte
Eu encontrei duas soluções para isso.
O primeiro, e mais simples, é usar,
std::getline()
por exemplo:... isso descartará o fluxo de entrada quando chegar a uma nova linha. Leia mais sobre esta função aqui .
Outra opção que descarta diretamente o stream é esta ...
Boa sorte!
fonte
fonte
E se:
fonte
Eu prefiro:
Há um exemplo em que cin.ignore simplesmente não funciona, mas não consigo pensar nele no momento. Já faz um tempo que precisei usá-lo (com o Mingw).
No entanto, fflush (stdin) é um comportamento indefinido de acordo com o padrão. fflush () serve apenas para fluxos de saída. fflush (stdin) só parece funcionar como esperado no Windows (com CCG e MS compiladores pelo menos) como uma extensão para o padrão C .
Portanto, se você usá-lo, seu código não será portátil.
Consulte Usando fflush (stdin) .
Além disso, consulte http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 para obter uma alternativa.
fonte
Outra solução possível (manual) é
Não consigo usar fflush ou cin.flush () com CLion, então isso foi útil.
fonte
Caminho mais fácil:
Ele apenas posiciona o ponteiro cin no final do fluxo stdin e cin.clear () limpa todos os sinalizadores de erro, como o sinalizador EOF.
fonte
O seguinte deve funcionar:
Em alguns sistemas não está disponível e você pode usar:
fonte
flush
método é apenas para saída e lida com caracteres já escritos.basic_istream<char>' has no member named 'flush'
e então usar a função
fonte
cin.get()
parece liberá-lo automaticamente de maneira bastante estranha (embora provavelmente não seja preferido, já que isso é confuso e provavelmente temperamental).fonte
Funcionou para mim Eu usei o loop for com getline ().
fonte