我正在尝试编写一个程序,要求使用cin.getline()
输入一个char数组,并且如果给定的输入大于数组长度,则array将被扩展。
我使用cin.failbit
来查看用户输入是否太长。但是,一切都没有发生。因此,在调试之后,我发现问题出在failbit
上。
所以我写了一个简单的程序来查看问题所在,结果发现cin.failbit
总是 在if语句中甚至返回true当输入看起来有效时。
int main () {
char name[256];
std::cout << "Enter your name: ";
std::cin.getline (name,256, '\n');
std::cout << "characters read: " << std::cin.gcount() << std::endl;
if (std::cin.failbit){
std::cin.clear();
std::cout << "failed\n";
}
}
例如,当输入为“ qwer”时,程序输出已读取5个字符(cin.gcount
),因此应该没问题,但它还会输出“ fail”,表示设置了故障位标志。但是我相信在这种情况下不应该这样。
那么谁能解释为什么failbit
似乎被永久设置了?
任何帮助将不胜感激
答案 0 :(得分:3)
std::cin.failbit
是一个常量,指示哪个错误位代表流故障。这并不表示流的当前状态。要检查该位是否已设置,请改用成员函数std::cin.fail()
。
但是,如果由于到达流的末尾而无法读取流,则fail()
将返回false
,使您相信它成功了。最好使用std::cin.good()
来检查上一次操作是否成功。