Операторы if / else для школьного проекта

Я только начинаю изучать C++ в школе, и у меня проблемы с завершением школьного проекта, требующего использования операторов if / else. Для проекта требуется код, который работает как: пример рабочего кода Мой код выглядит так:

#include <iostream>

using namespace std;

int ontime;
int zip;
int work;

int main()

{
cout << "Welcome to the DIG3873 System." << endl;
cout << "Did the student submit the exam on time (Y/N)? ";
cin >> ontime;

if (ontime == 'Y' || 'y') {
    cout << "Did the student zip the file (Y/N)? ";
    cin >> zip;

    if (zip == 'Y' || 'y') {
        cout << "Did the student's code work as requested (Y/N)? ";
        cin >> work;

        if (work == 'Y' || 'y') {
            cout << "Congratulations, YOU PASS. "<< endl;
        } else if (work == 'N' || 'n') {
            cout << "YOU FAIL " << endl;
        } else {
            cout << "Please enter a valid response. " << endl;
        }
    } else if (zip == 'N' || 'n') {
        cout << "YOU FAIL " << endl;
    } else {
        cout << "Please enter a valid response. " << endl;
    }
} else if (ontime == 'N' || 'n') {
    cout << "YOU FAIL " << endl;
} else {
    cout << "Please enter a valid response. " << endl;
}
}

К сожалению, это не работает, как я надеялся. Когда он запускается, он позволяет мне ответить на первый оператор, затем просто отбрасывает все остальные операторы cout и кучу «YOU FAIL» и завершает программу. Мы не узнали ничего, кроме операторов if / else, поэтому я был очень растерян, глядя на похожие проблемы с кодированием, когда люди рекомендовали вместо этого использовать циклы. Извините за такую ​​проблему для новичков, которая не понимает операторов if / else, спасибо!

if (ontime == 'Y' || 'y') { необходимо заменить на if (ontime == 'Y' || ontime == 'y') {, вы не можете проводить сравнения, как вы писали, они работают не так, как вы ожидали.
πάντα ῥεῖ 13.09.2018 18:45

Очевидно, вы хотите учиться у хорошая книга, чтобы изучить основы языка.

πάντα ῥεῖ 13.09.2018 18:47

Я пытаюсь найти дубликат, но пока: if (ontime == 'Y' || 'y') означает «если вовремя Y или если y»; то есть 'y' оценивается как отдельное условие, что всегда верно.

melpomene 13.09.2018 18:47

сделайте себе одолжение и напишите код маленькими шагами и проведите тестирование. Вы могли заметить, что что-то не так только с самым первым if в вашем коде. Гораздо проще тестировать и отлаживать небольшой код, чем тестировать и отлаживать большое количество кода.

463035818_is_not_a_number 13.09.2018 18:56

В общем, вы не должны использовать cin >> для пользовательского ввода. Если вам нужно использовать >>, всегда проверяйте, удалось ли это: if (cin >> ontime) { /* ok */ } else { /* something went wrong, ontime is not set */ }

melpomene 13.09.2018 18:58

Перед сравнением необходимо преобразовать символ в верхний или нижний регистр. См. tolower и toupper. Что-то вроде ontime = tolower(ontime); if (ontime == 'y').

Thomas Matthews 13.09.2018 19:10
3
6
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Выражение zip == 'Y' || 'y' будет всегда будет true.

Это потому, что единственное сравнение, которое было сделано, - это zip == 'Y'. Выражение действительно (zip == 'Y') || ('y'). То есть вы проверяете, равен ли zip'Y'; Или, если 'y', просто 'y', без сравнения или чего-то подобного. И поскольку 'y' не равен нулю, это правда.

Вам необходимо явно сравнить zip со значениями оба: zip == 'Y' || zip == 'y'.

То же самое относится и к другим вашим условиям.


У вас также есть другая проблема, и это то, что вы на самом деле читаете не символы, а целые числа. Если у вас есть переменные int и вы используете оператор форматированного ввода >>, ввод будет пытаться проанализировать ввод как целое число.

Для чтения символы вам необходимо использовать char.

Спасибо - к сожалению, после исправления этой проблемы во всем коде, теперь, независимо от того, что я набираю для первого ответа, код возвращает «Пожалуйста, введите правильный ответ».

Olivia 13.09.2018 18:52

@Olivia Подумайте о типы, который вы пытаетесь прочитать. Обновил свой ответ.

Some programmer dude 13.09.2018 18:56

Другие вопросы по теме