为什么格式化提取后 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()。然后它将丢弃下一个可用字符,这样就可以正常工作了。
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言
C++
C#
MongoDB
MySQL
JavaScript
PHP