C++ 循环:如何让程序在用户输入无效输入时多次重复 "error" 消息

C++ loops: how to get program to repeat "error" message more than once anytime user enters invalid input

我几乎完成了这项作业,但在输入正确输入之前获取代码以连续显示错误消息时仍然遇到问题。

例如,如果用户输入“4”进行操作(应该在1-3之间),则正确显示:"Your operation choice isn't valid! Please try again, using 1, 2, or 3."但是,如果用户输入另一个无效数字进行操作(例如如5),它不会重复错误信息,而是继续向前。

谁能帮我弄清楚如何让每条错误消息重复出现,直到为每个提示输入有效的数字或字符?

注意:我对编码还很陌生,还在研究 Whosebug...我想我已经关注了所有 MCVE suggestions/format。谢谢你!!

#include <iostream>
#include <cstdio>
#include <time.h>
#include <stdlib.h>
using namespace std;

int main()
{
    int operation, num3, guess, num1, num2, temp;
    char play;
    srand(time(0));

    do
    {
      num1 = rand() % 10;
      num2 = rand() % 10;

      if (num1 < num2)
      {
          temp = num1;
          num1 = num2;
          num2 = temp;
      }
        do
        {
            cout << "Choose an operation." << endl;
            cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " << 
endl;
            cout << "" << endl;
            cin >> operation;
            cout << "" << endl;

            if (operation > 3 || operation < 1)
            {
                cout << "Your operation choice isn't valid!  Please try 
again, using 1, 2, or 3." << endl;
                cout << "" << endl;
                cout << "Choose an operation." << endl;
                cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " 
<< endl;
                cout << "" << endl;
                cin >> operation;
                cout << "" << endl;
            }
        }
        while (operation > 3 || operation < 1);

        switch(operation)
        {
            case 1:
            cout << "You chose addition." << endl;
            num3 = num1 + num2;
            cout << "" << endl;
            cout << "What is " <<  num1 << " + " << num2 << " ?: " << endl;
            cout << "" << endl;
            cin >> guess;
            cout << "" << endl;

                if (guess != num3)
                    {
                    cout << "That is incorrect. Please try again." << endl;
                    cout << "" << endl;
                    cout << "What is " <<  num1 << " + " << num2 << " ?: " 
<< endl;
                    cout << "" << endl;
                    cin >> guess;
                    cout << "" << endl;
                    }

                else if (guess == num3)
                    {
                    cout << "That is correct!" << endl;
                    cout << "" << endl;
                    }
            break;

            case 2:
                cout << "You chose subtraction." << endl;
                num3 = num1 - num2;
                cout << "What is " <<  num1 << " - " << num2 << " ?: " << 
endl;
                cout << "" << endl;
                cin >> guess;
                cout << "" << endl;

                    if (guess != num3)
                        {
                        cout << "That is incorrect. Please try again." << 
endl;
                        cout << "" << endl;
                        cout << "What is " <<  num1 << " - " << num2 << " ?: 
" << endl;
                        cout << "" << endl;
                        cin >> guess;
                        }

                    else if (guess == num3)
                        {
                        cout << "That is correct!" << endl;
                        cout << "" << endl;
                        }
                break;

            case 3:
                cout << "You chose multiplication." << endl;
                num3 = num1 * num2;
                cout << "What is " <<  num1 << " * " << num2 << " ?: " << 
endl;
                cout << "" << endl;
                cin >> guess;
                cout << "" << endl;

                    if (guess != num3)
                        {
                        cout << "That is incorrect. Please try again." << 
endl;
                        cout << "" << endl;
                        cout << "What is " <<  num1 << " * " << num2 << " ?: 
" << endl;
                        cout << "" << endl;
                        cin >> guess;
                        }

                    else if (guess == num3)
                        {
                        cout << "That is correct!" << endl;
                        cout << "" << endl;
                        }
            break;
        }

        do
        {
             cout << "Would you like to play again? Press Y for yes or Q for 
quit" << endl;
             cout << "" << endl;
             cin >> play;

           if (play != 'Y' && play != 'Q')

            {
                cout << "That is not a valid choice. Please choose Y for yes 
or Q to quit. " << endl;
                cout << "" << endl;
            }

        }

        while(play !='Y' && play !='Q');

        if (play == 'Y')
        {
        cout << "Thank you for playing! Let's play again!" << endl;
        cout << "" << endl;
        }

        else
        {
        cout << "Thank you for playing! See you next time!" << endl;
        cout << "" << endl;
        }

     }
     while(play=='Y');
return 0;
}
/*Sample Run:
Choose an operation.
Enter 1 to add, 2 to subtract, or 3 to multiply:

3

You chose multiplication.
What is 4 * 1 ?:

4

That is correct!

Would you like to play again? Press Y for yes or Q for quit

Y
Thank you for playing! Let's play again!

Choose an operation.
Enter 1 to add, 2 to subtract, or 3 to multiply:

1

You chose addition.

What is 6 + 1 ?:

7

That is correct!

Would you like to play again? Press Y for yes or Q for quit

Y
Thank you for playing! Let's play again!

Choose an operation.
Enter 1 to add, 2 to subtract, or 3 to multiply:

2

You chose subtraction.
What is 5 - 0 ?:

5

That is correct!

Would you like to play again? Press Y for yes or Q for quit

Y
Thank you for playing! Let's play again!

Choose an operation.
Enter 1 to add, 2 to subtract, or 3 to multiply:

1

You chose addition.

What is 7 + 1 ?:

9

That is incorrect. Please try again.

What is 7 + 1 ?:

10

Would you like to play again? Press Y for yes or Q for quit

Y
Thank you for playing! Let's play again!

Choose an operation.
Enter 1 to add, 2 to subtract, or 3 to multiply:

2

You chose subtraction.
What is 7 - 3 ?:

5

That is incorrect. Please try again.

What is 7 - 3 ?:

6
Would you like to play again? Press Y for yes or Q for quit

Q
Thank you for playing! See you next time!


Process returned 0 (0x0)   execution time : 43.057 s
Press any key to continue.
*/

你的 while 循环

do
{
    cout << "Choose an operation." << endl;
    cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " << endl;
    cout << "" << endl;
    cin >> operation;
    cout << "" << endl;

    if (operation > 3 || operation < 1)
    {
        cout << "Your operation choice isn't valid!  Please try again, using 1, 2, or 3."
             << endl;
        cout << "" << endl;
        cout << "Choose an operation." << endl;
        cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " << endl;
        cout << "" << endl;
        cin >> operation;
        cout << "" << endl;
    }
}
while (operation > 3 || operation < 1);

应该是

do
{
    cout << "Choose an operation." << endl;
    cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " << endl;
    cout << "" << endl;
    cin >> operation;
    cout << "" << endl;

    if (operation > 3 || operation < 1)
    {
        cout << "Your operation choice isn't valid!  Please try again, using 1, 2, or 3."
             << endl;
    }
}
while (operation > 3 || operation < 1);

如果您只想让用户重试一次 select 正确操作,请不要使用 do-while 循环。保持这个方块

cout << "Choose an operation." << endl;
            cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: "<<endl;
cout << "" << endl;
            cin >> operation;
            cout << "" << endl;

            if (operation > 3 || operation < 1)
            {
                cout << "Your operation choice isn't valid!  Please try 
again, using 1, 2, or 3." << endl;
                cout << "" << endl;
                cout << "Choose an operation." << endl;
                cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " 
<< endl;
                cout << "" << endl;
                cin >> operation;
                cout << "" << endl;
            }

或 如果你只想为第一次错误尝试和所有成功的错误尝试打印错误消息,你可以按以下方式执行:

int flag=0;
do{
cout << "Choose an operation." << endl;
                cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: "<<endl;
    cout << "" << endl;
                cin >> operation;
                cout << "" << endl;

                if ((operation > 3 || operation < 1)&&flag==0)
                {
                    flag=1;
               cout << "Your operation choice isn't valid!  Please try again, using 1, 2, or 3." << endl;
                    cout << "" << endl;
                    cout << "Choose an operation." << endl;
                    cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " 
    << endl;
                    cout << "" << endl;
                    cin >> operation;
                    cout << "" << endl;
                }
} while(operation > 3 || operation < 1);

P29:练习算术技巧(if/else,循环)

描述:

"编写一个程序让child练习算术技能。​​

程序应该首先询问想要什么样的练习:+、-、*,然后让用户根据需要重复练习,直到输入"Q"。

将从 (0 - 9) 生成两个随机数。

如果 child 正确回答了方程式,将出现一条消息,然后他们可以转到下一个问题(生成两个不同的数字)。

如果 child 回答错误,应显示一条消息并重复该问题(使用相同的数字)。”

终于修复了!:

    #include <iostream>
    #include <cstdio>
    #include <time.h>
    #include <stdlib.h>
    using namespace std;

    int main()
   {
    int operation, num3, guess, num1, num2, temp;
    char play;
    srand(time(0));

    do
    {
      num1 = rand() % 10;
      num2 = rand() % 10;

      if (num1 < num2)
      {
          temp = num1;
          num1 = num2;
          num2 = temp;
      }

        do
        {
            cout << "Choose an operation." << endl;
            cout << "Enter 1 to add, 2 to subtract, or 3 to multiply: " << endl;
            cout << "" << endl;
            cin >> operation;

            if (operation > 3 || operation < 1)
            {
                cout << "Your operation choice isn't valid!  Please try again, using 1, 2, or 3." << endl;
            }
        }while (operation > 3 || operation < 1);

        switch(operation)
        {
            case 1:
            cout << "You chose addition." << endl;
            num3 = num1 + num2;
            cout << "" << endl;

            do
            {
                cout << "What is " <<  num1 << " + " << num2 << " ?: " << endl;
                cout << "" << endl;
                cin >> guess;
                cout << "" << endl;

                if (guess != num3)
                    {
                    cout << "That is incorrect. Please try again." << endl;
                    cout << "" << endl;
                    }
            } while (guess != num3);

                if (guess == num3)
                    {
                    cout << "That is correct!" << endl;
                    cout << "" << endl;
                    }
            break;

            case 2:
            cout << "You chose subtraction." << endl;
            num3 = num1 - num2;
            cout << "" << endl;

            do
            {
                cout << "What is " <<  num1 << " - " << num2 << " ?: " << endl;
                cout << "" << endl;
                cin >> guess;
                cout << "" << endl;

                if (guess != num3)
                    {
                    cout << "That is incorrect. Please try again." << endl;
                    cout << "" << endl;
                    }
            } while (guess != num3);

                if (guess == num3)
                    {
                    cout << "That is correct!" << endl;
                    cout << "" << endl;
                    }
            break;

            case 3:
            cout << "You chose multiplication." << endl;
            num3 = num1 * num2;
            cout << "" << endl;

            do
            {
                cout << "What is " <<  num1 << " * " << num2 << " ?: " << endl;
                cout << "" << endl;
                cin >> guess;
                cout << "" << endl;

                if (guess != num3)
                    {
                    cout << "That is incorrect. Please try again." << endl;
                    cout << "" << endl;
                    }
            } while (guess != num3);

                if (guess == num3)
                    {
                    cout << "That is correct!" << endl;
                    cout << "" << endl;
                    }
            break;
        }

        do
        {
             cout << "Would you like to play again? Press Y for yes or Q for quit" << endl;
             cout << "" << endl;
             cin >> play;

           if (play != 'Y' && play != 'Q')

            {
                cout << "That is not a valid choice. Please choose Y for yes or Q to quit. " << endl;
                cout << "" << endl;
            }

        }

        while(play !='Y' && play !='Q');

        if (play == 'Y')
        {
        cout << "Thank you for playing! Let's play again!" << endl;
        cout << "" << endl;
        }

        else
        {
        cout << "Thank you for playing! See you next time!" << endl;
        cout << "" << endl;
        }

     }
     while(play=='Y');

    return 0;
    }