簡體   English   中英

為什么即使輸入有效也總是設置 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 << "failed\n";
    }
} 

例如,當輸入是“qwer”時,程序輸出已經讀取了 5 個字符( cin.gcount ),所以它應該cin.gcount ,但它也會輸出“fail”,這意味着設置了 failbit 標志。 但我認為在這種情況下不應該是這樣。

程序輸出在這里

那么誰能解釋為什么failbit似乎被永久設置了?

任何幫助將不勝感激

std::cin.failbit是一個常量,指示哪個錯誤位代表流失敗。 它不是流當前狀態的指示。 要檢查該位是否已設置,請改用成員函數std::cin.fail()

但是,如果由於到達流的末尾而導致流fail()讀取, fail()將返回false您相信它成功了。 更喜歡std::cin.good()檢查最后一個操作是否成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM