为什么即使输入有效,也总是设置 cin.failbit
Why is cin.failbit always set even when input is valid?
我试图编写一个程序,要求使用cin.getline()
输入字符数组,如果给定的输入大于数组长度数组,则扩展数组。
我使用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 << "failedn";
}
}
例如,当输入是"qwer"程序输出已读取 5 个字符(cin.gcount
),所以它应该没问题,但它也输出"失败",这意味着设置了 failbit 标志。但我认为不应该在这种情况下。
程序输出在这里
那么谁能解释为什么failbit
似乎是永久设置的?
任何帮助将不胜感激
std::cin.failbit
是一个常量,指示哪个错误位表示流失败。它不指示流的当前状态。若要检查是否已设置该位,请改用成员函数 std::cin.fail()
。
但是,如果流由于到达流的末尾而无法读取,fail()
将返回false
使您相信它已成功。首选std::cin.good()
检查上一个操作是否成功。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- C++中的cin.ignore()函数不适用于整个流
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么不能通过在错误输入后设置 std::cin.clear() 来使用 std::cin?
- 如何在C++中将 cin 设置为类的成员函数?
- 设置输入(CIN)的超时
- 为什么即使输入有效,也总是设置 cin.failbit
- cin和设置类变量的问题
- cin.getline 将字符串的开头设置为 '