【发布时间】:2019-10-21 18:20:07
【问题描述】:
所以,我使用 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 ,这就是导致问题的原因。问题解决了。
【问题讨论】:
-
未使用分隔符“h”。但由于提供的第二个参数是 10,getline 应该只读取它遇到的前 9 个字符,然后停止。而且,事情就是这样发生的。
-
getline设置failbit如果在提取最大字符数后分隔符不存在。 -
@L.F.所以,假设我想读到 9 个字符被读完或遇到分隔符。现在,getline 不起作用,因为它设置了故障位,那么如何解决这个问题呢?我想,一种方法是检查是否设置了故障位,如果是这种情况,请再次取消设置?
-
是的。无论是否设置了
failbit,您都可以只使用std::cin.clear()。