[英]cin.fail not working as expected in do while
為什么這段代碼在正確的整數輸入上運行兩次? 在第一個輸入整數時,它再次要求輸入,然后在正確的輸入上退出。 是否與cin的范圍有關?
#include <iostream>
using namespace std;
int main()
{
int q1 = 1;
do
{
cin.clear();
cin.ignore();
cin >> q1;
}
while(cin.fail());
return 0;
}
在第一次迭代中, cin.ignore();
意味着第一個字符將被忽略。 使用調試器cin.ignore()
會向您cin.ignore()
實際上會阻塞,直到您提供輸入。 如果您的輸入是一位數int
,則該值將被忽略。 然后, std::cin
會等到你給出另一個值。 在這種情況下,循環只執行一次,但您必須提供兩個值,因此看起來它執行了兩次。
解決方案是僅在出現錯誤時才忽略。 您也應該使用cin.ignore(std::numeric_limits<std::streamsize>::max(), '\\n');
忽略整個輸入行cin.ignore(std::numeric_limits<std::streamsize>::max(), '\\n');
而不是僅僅ignore
單個字符。 請嘗試以下操作:
#include <ios>
#include <iostream>
#include <limits>
int main()
{
int q1 = 1;
std::cin >> q1;
while (std::cin.fail()){
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin >> q1;
}
std::cout << q1;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.