为什么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()。然后它将丢弃下一个可用字符,因此它将正常工作。
热门推荐
10 朋友新年祝福语大全 简短
11 新年祝福语简短大方兔年
12 搬新家礼物祝福语简短
13 同学见面花束祝福语简短
14 五一假期祝福语幽默简短
15 离职欢送敬酒祝福语简短
16 对学弟的祝福语简短
17 考老师辞职祝福语简短
18 祝福语驱散霉运的话简短