因此,我使用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
,这就是导致此问题的原因。问题解决了。
答案 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;
...