为什么std :: getline()在格式化提取后会跳过输入?
std::getline()在进行某些格式化提取后会跳过输入。我们可以简单地从以下代码检查此错误-
范例程式码
#include <iostream> #include <string> using namespace std; int main(){ string name; string city; if (cin >> name && getline(cin, city)){ cout << "Your name " << name << " and city " << city; } }
输出结果
Amal Your name Amal and city
我们可以看到该程序不接受第二个输入。有时可能需要第二个输入,但在输出中将仅显示第一个输入。现在的问题是为什么它的行为如此?
此问题的主要原因是,当我们写入第一个字符串时,然后按Enter或Return按钮。当按下Enter或Return键时,它将在当前行之后插入'\n'字符。这个角色正在产生问题。它忽略了字符串的下一部分。
如果名称为“Amal”,则内部名称为“Amal\n”。为了克服这个问题,一个选择是在第一次提取后调用std::cin.ignore()。然后它将丢弃下一个可用字符,因此它将正常工作。