Как выйти из цикла while (продолжить) - PullRequest
0 голосов
/ 24 ноября 2018

Я пытался решить простую проблему с моим кодированием (я новичок в C ++).

В основном я пытаюсь выйти из цикла while, используя

continue

или

break

но это не работает.Проблема в том, что часть

cout << "it worked!";

не выполняется.

#include <iostream>
#include <string>
using namespace std;

int main() {
    int userChoice=0;
    cout<<"1 for addiction and 2 for subtraction\n";
    do{
        if(cin >> userChoice){
            switch (userChoice) {
                case 1:
                    continue;
                case 2:
                    continue;
                default:
                    cout<<"Please select 1 for addiction or 2 for subtraction.\n";
                    break;
            }
        }
    }while(userChoice!=1 || userChoice!=2);

    cout<<"it worked!";
}

int addiction(int a,int b){
    return a+b;
}

int subtraction(int a,int b){
    return a-b;
}

1 Ответ

0 голосов
/ 24 ноября 2018

Невозможно выйти из цикла, потому что userChoice всегда равно всегда либо "не 1", либо "не 2" (это не может быть и то и другое!).

Таким образом, поскольку continue просто всегда будет переходить к другой итерации, а поскольку break выбрасывает вас из switch (не цикла), ваш цикл никогда не может закончиться, и cout никогда не будет выполнен.

Мне кажется, что вы хотите повторять только до тех пор, пока userChoice не равно 1 и это также не 2:

while(userChoice!=1 && userChoice!=2);

Это иногдавводит в заблуждение новичков, которые используют ярлыки на английском языке, такие как «userChoice is not 1 или 2», когда они действительно означают «userChoice не является ни 1, ни 2» и не понимают, что C ++ вообще не имеет конструкции «ни / ни», так что конецвплоть до написания «userChoice не равно 1 или userChoice не равно 2» по ошибке, не продумав это до конца.

Поскольку позитивы более интуитивны, чем негативы, один из способов прояснить это для себя - это применить закон де Моргана;Ваш фиксированный код эквивалентен:

while(!(userChoice == 1 || userChoice == 2));

, т. е. «цикл, пока он , а не , в случае, если userChoice равен 1 или 2».Это, возможно, худший код, но он может помочь вашему пониманию кратко написать его таким образом.

...