c++builder - Здравствуйте у меня проблема с циклом в C++ он постоянно срабатывает


1
#include <iostream>
using namespace std;
int main() {
    int num, num1, opr;
    char mmsvh;
    cin >> num;
    cin >> opr;
    while (opr != + || - || x || :) {
        cout << "Error" << " ";
        cin >> opr;
    }
    cin >> num1;
    if (opr == +) {
        cout << num + num1 << endl;
    }
    if (opr == -) {
        cout << num - num1 << endl;
    }
    if (opr == x) {
        cout << num * num1 << endl;
    }
    if (opr == :) {
        cout << num / num1 << endl;
    }



    system("pause");
        return 0;
}

цикл срабатывает постоянно даже, когда он равен +,-,x,:

операционная система::Windows 10

компилятор::Visual Studio 2017 я новичок в c++

Источник
  •  60
  •  2
  • 12 янв 2018 2018-01-12 10:08:18
У меня де жа вю или точно такойже вопрос был ранее? я точно такую же ошибку уже видел. возможно, было на англ. сайте, впрочем. — 12 янв 20182018-01-12 12:54:14.000000
@Eanmos, но не для cinа... хотя если подразумевается ввод "2 43 2", а не "2 + 2", то, конечно, всё в порядке... — 12 янв 20182018-01-12 10:35:22.000000
@Fat-Zer, так символ и есть число... — 12 янв 20182018-01-12 10:32:27.000000
не говоря уже о том, что opr читается как число, а не символ... — 12 янв 20182018-01-12 10:31:32.000000
Выражение opr != + || - || x || : делает совсем не то, что вы думаете. Вам надо сравнить переменную с каждым символом отдельно. — 12 янв 20182018-01-12 10:11:31.000000

2 ответа

1

Замените

while (opr != + || - || x || :) {
        cout << "Error" << " ";
        cin >> opr;
    }

на

while (opr != + && opr != - && opr != x && opr != :) {
        cout << "Error" << " ";
        cin >> opr;
    }
2

В C так нельзя. Как и сказал @VTT в комментариях, нужно сравнить переменную с каждым значением отдельно. Т.е.:

while (opr != + &&
       opr != - &&
       opr != x &&
       opr != :)

Да, у Вас в цикле везде вместо || нужно поставить && иначе он будет выполняться вечно. Такая же проблема в этом вопросе.

@pavel, точно, слона то и не заметил:) — 12 янв 20182018-01-12 10:43:08.000000
круто. вечный цикл. — 12 янв 20182018-01-12 10:41:44.000000