12

我想知道如何使用cin,以便如果用户没有输入任何值而只是推动ENTER将其cin识别为有效输入。

4

5 回答 5

15

您可能想尝试std::getline

#include <iostream>
#include <string>

std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
于 2008-09-29T21:29:19.997 回答
5

我发现对于用户输入std::getline来说效果很好。

您可以使用它来读取一行并丢弃它读取的内容。

做这样的事情的问题,

// 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?

是如果用户输入其他垃圾,例如“4.5 - about”,那么在打印下一次需要查看的提示之前,很容易不同步并阅读用户上次写的内容。

如果您阅读每一个完整的行,std::getline( std::cin, a_string )然后解析返回的字符串(例如,使用 istringstream 或其他技术),即使面对乱码输入,也更容易保持打印提示与从 std::cin 读取同步。

于 2008-09-29T21:27:12.140 回答
2

有没有cin。getline 能解决你的问题吗?

于 2008-09-29T21:23:58.543 回答
2

要检测用户按下 Enter 键而不是输入整数:

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

或者:

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
于 2015-03-13T03:43:06.080 回答
0

尝试取消缓冲 cin (默认情况下它是缓冲的)。

于 2008-09-29T21:32:40.533 回答