[英]loop involving "cin.fail()" running multiple times
我在使用以下代碼時遇到問題。 這意味着一直要求輸入有效,直到輸入 integer 或雙精度。 它適用於字符,但是當我輸入長度超過 1 的字符串時,它將多次運行循環。 例如,輸入“hello”導致“請輸入有效數字”被打印 5 次。 有趣的是,“h llo”只會打印該句子 4 次。
int gamenumber;
while(true)
{
cin >> gamenumber;
if(cin.fail())
{
cout << "Please enter a valid number" << endl;
cin.clear();
cin.ignore();
} else
break;
我確實設法通過將“cin.ignore()”替換為“cin.ignore(1000, '\n')”來解決這個問題。
但無論如何,我不明白為什么單獨使用“cin.ignore()”不能解決這個問題,這讓我很煩惱? 有沒有辦法在不使用“cin.ignore(1000, '\n')”的情況下修復上述代碼? (這是家庭作業的一部分,我們可能不允許使用“cin.ignore(1000, '\n')”)
謝謝!
您需要對重載的使用ignore
,請在此處查看此分析器。
或者您可以只需要運行getline
來排空內容,但這種方式速度較慢且不必要。
#include <iostream>
#include <string>
int main()
{
double n;
while( std::cout << "Please, enter a number\n"
&& ! (std::cin >> n) )
{
std::cin.clear();
std::string line;
std::getline(std::cin, line);
std::cout << "I am sorry, but '" << line << "' is not a number\n";
}
std::cout << "Thank you for entering the number " << n << '\n';
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.