我正在用C ++ turbo编写一个赌场游戏(Windows的最新版本)。 因此,在该程序的一个特定片段中,用户需要输入严格在0美元到100000美元之间的初始金额。
我使用嵌入式if语句创建了一个do-while循环:
do{
cout << "\n\nEnter a deposit amount (between $0 and $100000) to play game : $";
cin >> amount;
if(amount<=0||amount>=100000)
cout<<"Please re-enter your amount";
}while(amount<=0||amount>=100000);
当用户(即我)输入字符或小数时出现问题;程序然后失去控制,它会无限循环。
问题:如果输入除整数以外的其他内容,如何使用if语句来请求用户重新输入金额?随后,我怎样才能阻止程序失控?
答案 0 :(得分:3)
问题在于,当您调用cin >> amount
并且输入不是数字时,数据将保留在缓冲区中。一旦你的代码循环回到相同的操作,你的读取就会在无限循环中再次失败。
要解决此问题,您需要检查cin >> amount
的结果,如下所示:
if (cin >> amount) {
... // do something with amount
} else {
cin.clear(); // unset failbit
// Ignore some input before continuing
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
ignore
函数的引用是here。
答案 1 :(得分:2)
您必须清除错误标志并忽略字符。
有关cin.clear()的示例,请参阅here。
do {
cout << "Enter a deposit amount (between $0 and $100000) to play game : $";
cin >> amount;
if(amount<=0 || amount>=100000) {
cout << "\nPlease re-enter your amount\n";
cin.clear();
cin.ignore(10000,'\n');
}
} while(amount<=0 || amount>=100000);
答案 2 :(得分:1)
试试这个
if(amount<=0||amount>=100000)
{
cout<<"Please re-enter your amount";
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}