C ++ ter cin ler um caractere de retorno
Pergunta
Eu queria saber como usar cin
de modo que se o usuário não entrar em qualquer valor e apenas empurra ENTER
que cin
vai reconhecer isso como uma entrada válida.
Solução
Você provavelmente vai querer tentar std::getline
:
#include <iostream>
#include <string>
std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
Outras dicas
Eu acho que a entrada do usuário std::getline
funciona muito bem.
Você pode usá-lo para ler uma linha e apenas descartar o que ele lê.
O problema em fazer coisas como esta,
// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;
std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?
é que, se o utilizador introduz outros tipos de lixo, por exemplo, "4.5 - sobre." É muito fácil ficar fora de sincronia e ler o que o usuário escreveu pela última vez antes de imprimir a solicitação que ele precisa ver na próxima vez
Se você ler cada linha completa com std::getline( std::cin, a_string )
e, em seguida, analisar a cadeia devolvida (por exemplo, usando um istringstream ou outra técnica) é muito mais fácil para manter as instruções impressas em sincronia com a leitura de std :: cin, mesmo em face de input ilegível.
O cin. getline resolveu seu problema?
Para detectar o usuário pressiona a tecla Enter em vez de inserir um inteiro:
char c;
int num;
cin.get(c); // get a single character
if (c == 10) return 0; // 10 = ascii linefeed (Enter Key) so exit
else cin.putback(c); // else put the character back
cin >> num; // get user input as expected
Como alternativa:
char c;
int num;
c = cin.peek(); // read next character without extracting it
if (c == '\n') return 0; // linefeed (Enter Key) so exit
cin >> num; // get user input as expected
Tente cin unbuffering (é tamponado por padrão).