Циклы C ++: как заставить программу повторять сообщение об ошибке более одного раза каждый раз, когда пользователь вводит неверный ввод - PullRequest
0 голосов
/ 25 мая 2018

Я почти закончил с этим назначением, но все еще не могу получить код для непрерывного отображения сообщений об ошибках до тех пор, пока не будет введен правильный ввод.

Например, если пользователь вводит «4» для операции(которое должно быть между 1-3), оно правильно отображает: «Ваш выбор операции недействителен! Пожалуйста, попробуйте еще раз, используя 1, 2 или 3».Однако, если пользователь вводит другой недопустимый номер для операции (например, 5), он не повторяет сообщение об ошибке, а просто продолжает пересылку.

Любой, кто сможет помочь мне выяснить, как получить каждую ошибкусообщение повторяться до тех пор, пока для каждого приглашения не будут введены действительные числа или символы?

Примечание. Я очень новичок в кодировании и все еще не могу понять, как работает переполнение стека ... Я думаю, что выполнил всеMCVE предложения / формат.БЛАГОДАРЮ ВАС!!

#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.
*/

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Не используйте цикл 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);
0 голосов
/ 25 мая 2018

P29: Практика арифметических навыков (если / еще, цикл)

Описание:

"Напишите программу, позволяющую ребенку практиковать арифметические навыки.

Сначала программа должна спросить, какой тип практики требуется: +, -, *, и позволить пользователю повторять эту практику столько раз, сколько необходимо, пока не будет введено «Q».

Два случайных числа будутгенерируется из (0 - 9).

Если ребенок правильно отвечает на уравнение, должно появиться сообщение, и они могут перейти к следующей задаче (сгенерировано два разных числа).

Еслиребенок отвечает неправильно, должно появиться сообщение, и проблема должна быть повторена (используются те же номера). "

Окончательно исправлено! :

    #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;
    }
0 голосов
/ 25 мая 2018

Цикл do do

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...