C ++ Do-while循环停止

时间:2015-09-19 00:12:15

标签: c++ do-while

我得到了一个作业,我们让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;
}

2 个答案:

答案 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;
}