如何输入一个整数,然后输入一个“带空格”的字符串?
这是我尝试过的:
int x;
string s;
cout << "Enter Integer" << endl;
cin >> x;
cout << "Enter the string with spaces" << endl;
// "cin >> s;" doesn't read the text after the first space
// "getline(cin,s);" doesn't seem to read anything
您可能遇到的问题是
cin >> x
仅读取您键入的数字的数字,而不是后面的换行符。然后,当您执行 cin >> s
读取字符串时,输入处理器会看到换行符并仅返回一个空字符串。解决方案是使用旨在读取整行输入的函数,例如
std::getline
。请勿使用提取运算符
>>
进行交互式输入。。但是!
>>
遇到分隔符时会发生什么。它停止并将分隔符留在流中。只要您只使用
>>
,这不是问题,因为 >>
会丢弃所有空白。 std::getline
将捕获该空白,常见的用例是user types in number and hits enter
user types in string and hits enter
那么会发生什么呢?
>>
提取数字并在遇到空格时停止。通过在流中按 Enter 键,将行尾留在流中。
std::getline
出现,它看到的第一件事是……行尾。 std::getline
存储一个空字符串并立即返回。现在,程序处理一个空字符串,并且仍然期望输入字符串的用户输入一个将由将来的读取操作读取的字符串,可能会将输入流放入错误情况,并且肯定会给用户带来惊喜。一个常见的解决方案是 使用 ignore(numeric_limits<streamsize>::max(), '\n');
来消耗流中直至(包括行尾)的所有数据,然后提示用户输入并调用
std::getline
。