【发布时间】:2021-01-22 12:59:40
【问题描述】:
我目前正在学校尝试编写一个程序,该程序涉及用于掷骰子的随机数生成器。我已经成功编写了代码,但我正在尝试改进它,以便用户可以选择骰子的大小和用户尝试滚动的数字。
我已经编写了执行此操作的代码,并且我还添加了代码,如果错误的值(即不是提供的骰子大小之一或试图掷骰子范围之外的数字)或输入类型(即 var 而不是 int)。但是,如果输入了浮点数,并且浮点左侧的数字在正确的值范围内,则它正在使用该数字。
例如:
int size = 0;
cout << "Please choose the size of the dice to roll (6, 12 or 20): ";
cin >> size;
while (size != 6 && size != 12 && size != 20 || !cin)
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid number entered. Choose the size of the dice to roll (6, 12 or 20): ";
cin >> size;
}
如果输入了任何不是 6、12 或 20 的字母或任何数字,但如果输入 20.125(或 6.- 12.- 或 20.- 的任何浮点数,这将正确地要求重复输入) 输入它将获取数字并移动到下一位代码。如果我输入一个有效数字后跟字母(即 6f),也会发生这种情况。
我尝试将while循环的条件修改为:
while (size != 6 && size != 12 && size != 20 || !(cin >> size))
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid number entered. Choose the size of the dice to roll (6, 12 or 20): ";
cin >> size;
}
这解决了问题,如果我输入 12.5 或 20R 等,它会要求我输入另一个输入,但是当我输入正确的输入(6、12 或 20)时,它只会将我带到调试器中的新行无需移动到下一行代码。如果我然后再次输入正确的输入,它会读取它并将我带到下一行代码。
我不太明白为什么一个错误可以 99% 以我想要的方式工作,而另一个修复了该错误但又给了我另一个错误。
提前致谢,非常感谢任何建议指导!
【问题讨论】:
-
你可以读成一个字符串并尝试convert the string to an integer,然后检查整个字符串是否被转换。
-
无关:如果
cin关闭,则循环将永远继续。 -
不幸的是,
cin完全没用。我推荐@Someprogrammerdude 的建议。
标签: c++ validation c++11 input while-loop