c ++ несколько операторов if. Почему еще выполняется инструкция else? - PullRequest
1 голос
/ 07 августа 2020

Когда я выполняю оператор if прямо перед оператором else, код будет выполняться правильно. Но когда я выполняю оператор if, который находится вдали от оператора else, c ++ выполнит выбранный оператор if, но также будет выполнен оператор else. Что там происходит?

Я знаю, как исправить свой код, без продолжения проблемы с выполнением оператора else. Я просто хочу знать, что делает С ++ или как работает поток, когда я помещаю два или более операторов if плюс оператор else. Почему оператор else выполняется, когда оператор if уже выполнен?

Например, в этом коде: если когда-либо я ввожу значение ниже 160, будет выполняться первый оператор if, но оператор else также будет выполняться после него .

#include <iostream>
using namespace std;

int main()
{

    float h;

    cout << "What is your height in centimeters?";
    cin >> h;
    if (h <= 160) {
        cout << "You are too small!";
    }
    if (h >= 190) {
        cout << "You are too tall!";
    }
    else {
        cout << "You have the appropriate height. You are qualified!";
    }
}

Ответы [ 3 ]

4 голосов
/ 07 августа 2020

Лучший способ понять этот результат - это понять, что у вас есть два полностью независимых оператора if . Если h <= 160, будет выполнен оператор в первом блоке <em>if . Затем, совершенно отдельно, программа выведет один из двух операторов во втором блоке if ... else , в зависимости от того, h> = 190 или нет:

if (h <= 160) {
    cout << "You are too small!";
}
// the following is a separate statement
if (h >= 190) {
    cout << "You are too tall!";
}
else {
    cout << "You have the appropriate height. You are qualified!";
}

What вы действительно хотите выполнить второй блок if ... else , только если первый оператор if ложен. Самый ясный способ проиллюстрировать это - заключить второй блок if ... else в термин else для первого оператора if :

if (h <= 160) {
    cout << "You are too small!";
}
else {
    if (h >= 190) {
        cout << "You are too tall!";
    }
    else {
        cout << "You have the appropriate height. You are qualified!";
    }
}

Надеюсь, этот отступ поможет вам увидеть ход программы.

Существует более простой способ sh сделать то же самое, и его будет легче прочитать, если вы поймете логику выполнения программы c, и это особенно полезно для сокращения количества блоков {} и отступов как можно больше , если добавлены условия:

if (h <= 160) {
    cout << "You are too small!";
}
else if (h >= 190) {
    cout << "You are too tall!";
}
else {
    cout << "You have the appropriate height. You are qualified!";
}
3 голосов
/ 07 августа 2020

c ++ выполнит выбранный оператор if, но также будет выполнен оператор else. Что там происходит?

Эти два оператора if являются отдельными, а else является частью второго оператора if:

/* One if statement block  ************************/
 *       if(h<=160){
 *          cout << "You are too small!";
 *            
 *        }
/*************************************************/

/* Second if Statement block, "else" is part of it. Only one of them can be true */
 *        if(h>=190){ 
 *            cout << "You are too tall!";
 *            
 *        }
 *        else{ 
 *            cout << "You have the appropriate height. You are qualified!";
 *            
 *        }
/*****************************************************/
  1. IF h меньше 160, первая инструкция true , и вы увидите "You are too small!" на выходе.
  2. Второй IF проверяется, затем , и если первым было истина , вторым, очевидно, будет ложь , потому что h меньше 160. Если это ложь , блок else будет

Каждый раз, когда вы пишете:

if (...)  {}
else  {}

Выполняется одно из вышеперечисленных, т.е. if блок ИЛИ else блок.

Обратите внимание, что есть также оператор else if, который можно использовать как: '

    if (h <= 160) {  //1st check
        cout << "You are too small!";
    }
    else if (h >= 190) { //second check
        cout << "You are too tall!";
    }
    else { //third
        cout << "You have the appropriate height. You are qualified!";
    }

Теперь эти три элемента являются частью одной условной проверки. Только один из них будет работать одновременно.

2 голосов
/ 07 августа 2020

Если я когда-нибудь введу значение ниже 160, будет выполнен первый оператор if, но после него будет выполняться оператор else.

Вот как работает оператор if - все как и ожидалось.

  • первый if выполняется, потому что условие выполнено (h <160). Примечание: теперь все СДЕЛАНО с первым <code>if.

  • второе if полностью не зависит от первого if. И поскольку условие не выполняется, выполняется else.

...