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.

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top