为什么即使输入有效,也总是设置 cin.failbit

Why is cin.failbit always set even when input is valid?

本文关键字:设置 cin failbit 输入 有效 为什么      更新时间:2023-10-16

我试图编写一个程序,要求使用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()检查上一个操作是否成功。