[英]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.