C ++ If-else Branch не будет выводить - PullRequest
0 голосов
/ 26 марта 2020

надеюсь, все хорошо. Я работал над кодом (C ++), который бы определял время года в зависимости от ввода пользователя. Предполагается, что пользователь вводит действительный месяц и дату в году, и от этого код должен определять сезон. Согласно указаниям моего профессора:

Даты для каждого сезона: весна: 20 марта - 20 июня лето: 21 июня - 21 сентября осень: 22 сентября - 20 декабря зима: 21 декабря - 19 марта

Я сейчас работал над Spring, и у меня есть этот код. Просто немного наперед, при вводе значений с 20 марта по 31 марта код выполняется в соответствии с моими ожиданиями и печатает то, что ищется. Тем не менее, когда я набираю какое-либо значение, например 1 июня - 20 июня, программа компилируется, но не выводит.

Вот ссылка на мой код: https://repl.it/repls/FlippantAgileTheory

А вот код:

using namespace std;

int main() {
    string inputMonth;
    int inputDay;

    cin >> inputMonth;
    cin >> inputDay;

    if (inputMonth == "March" || inputMonth == "June") {
        if (inputMonth == "March") {
            if (inputDay > 19 && inputDay < 32) {
                cout << "Spring\n";
            }
            else if (inputMonth == "June") {
                // this is the aspect of the code that doesn't work
                if ((inputDay > 0) && (inputDay < 21)) { 
                    cout << "Spring\n";
                }
            }
        }
    }
}

Ответы [ 3 ]

1 голос
/ 26 марта 2020

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

Like-

if(inputMonth=="March"){
   ...
}
else if(inputMonth=="June"){
   ...
}

Также я думаю, что было бы лучше использовать переключатели здесь для месяцев иначе, чем использование вложенного if- в противном случае для лучшего качества кода используйте названия месяцев в классе enum.

0 голосов
/ 26 марта 2020

Важно убедиться, что код правильно отформатирован.

В вашем случае, я предполагаю, что вы хотели реализовать:

if (inputMonth == "March" || inputMonth == "June"){

    if (input == "March") {
        if (inputDay > 19 && inputDay < 32){
            cout << "Spring\n";
         }
    }

    else if (input == "June") {
        if ((inputDay > 0) && (inputDay < 21)){ 
            cout << "Spring\n";
        }
    }
}

Просто внесите изменения в расположение скобок, чтобы убедиться, что ваше соответствие if и else будет правильно работать, чтобы код работал нет времени.

Надеюсь, это поможет.

0 голосов
/ 26 марта 2020

Проблема становится очевидной, если вы добавите правильное форматирование.

Все ваши операторы печати находятся в блоке

if (inputMonth == "March") {
    // ...
}

Это означает, что ни один другой месяц не может вызвать печать.

Вы, вероятно, имели в виду

if (inputMonth == "March") {
    // ...
}
else if (inputMonth == "June") {
    // ...
}
...