C++如何让cin读取回车符

13

我想知道如何使用cin,使得如果用户没有输入任何值,只是按下了ENTERcin也能将其识别为有效的输入。


Bjarne Stroustrup的《C++程序设计语言》确信cin会返回'\n',但我无法让它正常工作。我将尝试使用getline方法。 - Paul Linden
5个回答

15

你可能希望尝试使用 std::getline

#include <iostream>
#include <string>

std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...

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中读取的内容保持同步。

2
为了检测用户按下回车键而不是输入整数:
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

2

你是否可以使用cin.getline来解决你的问题?


0

尝试取消缓冲cin(它默认为缓冲)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接