使用getline后如何使cin工作?

时间:2019-06-06 08:51:32

标签: c++ input io 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,这就是导致此问题的原因。问题解决了。

1 个答案:

答案 0 :(得分:1)

问题是getline尚未找到其定界符,并且已在cin中设置了故障位标志。您必须清除该标志才能在流上再次读取:

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