为什么格式化提取后 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
我们可以看到程序没有接受第二个输入。有时候它可以接受第二个输入,但在输出中只显示第一个输入。现在的问题是为什么会出现这种现象?
此问题的主要原因是,当我们编写第一个字符串时,我们按下了回车键或返回键。当按下回车键或返回键时,它会在当前行后面插入‘\n’字符。这个字符导致了该问题。它忽略了字符串的下一部分。
如果名称为“Amal”,那么它内部获取的是“Amal\n”。要解决这个问题,一个选择是在第一个提取后调用 std::cin.ignore()。然后它将丢弃下一个可用字符,这样就可以正常工作了。
广告