我得到了一个作业,我们让cmd提示出现并显示一个闪卡游戏以进行乘法。输入正确的答案后,会出现一个提示,并要求用户“再次?Y / N”。在第二个输入回答后,询问用户的提示没有显示,并且它卡在“祝贺”消息上。当我在代码中写入两次为游戏随机生成两个数字时会发生这种情况。一个在while循环之外,一个在while循环之内。如果我从随机数的第二个代码中留下一个,它将运行正常,但只会再次显示相同的数字。我问的是如何修复它以便在第二个答案输入后不会卡住?
以下示例代码:
#include <iostream>
using namespace std;
int main()
{
int num1, num2, ans, guess, count = 0;
char choice;
num1 = rand() % 12 + 1;
num2 = rand() % 12 + 1;
//first number generator.
ans = num1 * num2;
do
{
{
cout << num1 << " X " << num2 << " = ";
cin >> guess;
cout << "Wow~! Congratulations~! ";
count++;
num1 = rand() % 12 + 1;
num2 = rand() % 12 + 1;
//second number generator.
} while (guess != ans);
cout << "\nAgain? Y/N: ";
cin >> choice;
} while ((choice == 'y') || (choice == 'Y'));
//after two turns the loop stops. Can't make a choice.
cout << " Thanks for playing! Number of tries:" << count << endl;
return 0;
}
答案 0 :(得分:4)
我猜这个问题是因为你的循环并不像你认为的那样。
do
{
上面的代码已启动do
循环。
{
我怀疑你打算在这里开始另一个(嵌套的)do
循环 - 但是你离开了do
,所以它只是一个被输入,执行和退出的块。在这种情况下无用而毫无意义。
cout << num1 << " X " << num2 << " = ";
cin >> guess;
cout << "Wow~! Congratulations~! ";
count++;
num1 = rand() % 12 + 1;
num2 = rand() % 12 + 1;
//second number generator.
} while (guess != ans);
您已将此格式设置为好像while
正在关闭嵌套的do
循环 - 但由于您实际上并未创建嵌套的do
循环,只是一个空while
循环。通过稍微重新格式化,其含义会更明显:
// second number generator
}
while (guess != ans)
/* do nothing */
;
答案 1 :(得分:2)
问题可以在这里找到:
do
{
{
cout << num1 << " X " << num2 << " = ";
cin >> guess;
如您所见,第二个范围没有do
语句。因此,它只是一个代码块。
您可以通过为第二个代码块编写do
语句来解决此问题。
由于第二个括号(do
)中不存在{
,while
被解释为while
循环:
while (guess != ans);
或
while (guess != ans) {
}
因此保持循环直到guess
不等于ans
。但由于在循环中不修改任何两个变量,循环将继续迭代。
其他错误:请注意该程序仍然不正确,因为无论答案是什么,它都会声称您已回答了问题。你可以通过如下实现来解决它:
int main()
{
int num1, num2, ans, guess, count = 0;
char choice;
do {
num1 = rand() % 12 + 1;
num2 = rand() % 12 + 1;
ans = num1 * num2;
do {
cout << num1 << " X " << num2 << " = ";
cin >> guess;
if(guess == ans) {
cout << "Wow~! Congratulations~! ";
} else {
cout << "No, wrong!\n";
}
count++;
} while (guess != ans);
cout << "\nAgain? Y/N: ";
cin >> choice;
} while ((choice == 'y') || (choice == 'Y'));
//after two turns the loop stops. Can't make a choice.
cout << " Thanks for playing! Number of tries:" << count << endl;
return 0;
}