为什么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()。然后它将丢弃下一个可用字符,因此它将正常工作。