首页 > 解决方案 > 使用getline后如何使cin工作?

问题描述

因此,我使用 cin.getline(str,10,'h') 读取了一个字符串,如您所见,我使用了自定义分隔符 'h' 并希望读取最多 9 个字符。完成此操作后,我使用 cin>>n 将一个整数读入我的 int 变量 n。

#include <iostream>
using namespace std;
int main() {
    int n;
    char str[100];
    cin.getline(str, 10, 'h');
    cout<<str<<'-'<<endl;
    cout<<"Enter a number:";
    cin>>n;
    cout<<n;
    return 0;
}

假设我通过以下输入


2 3   pl32

这是一个 '\n' 后跟“2 3 pl32”。我希望 getline 读取字符串"\n2 3 pl",然后 cin 读取整数 32。但事实并非如此。

实际输出显示 cin 读取了垃圾值:


2 3   pl-
Enter a number:0

编辑:好的,所以我现在明白了。Getline 设置了failbit,这就是导致问题的原因。问题解决了。

标签: c++inputiocin

解决方案


问题是getline没有找到它的分隔符,并且在cin. 您必须清除标志才能在流上再次读取:

...
cin.getline(str, 10, 'h');
cin.clear();                  # reset a possible error condition
cout<<str<<'-'<<endl;
cout<<"Enter a number:";
cin>>n;
...

推荐阅读