Заявление If-Else, возвращающее ту же обратную связь - PullRequest
0 голосов
/ 01 июня 2018

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

int ch;
cout << "Do you have any extra credit points? (Enter Y/y or N/n)" << endl;
cin >> ch;
int ExtraCredit;
if (ch == 'Y' || ch== 'y')
{
    cout << "Enter the number of extra credit points: ";
    cin >> ExtraCredit
}
else if (ch!='n' || ch!='N' || ch != 'y' || ch != 'Y')
{
    ExtraCredit=0; 
    cout<< Invalid entry. Program Aborted." << endl;
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

целые и символы являются отдельными типами, хотя их можно сравнивать на основе значения ASCII символа в C ++.Поскольку они определены как отдельные типы, когда ваш код попадает в строку cin >> ch, а ch имеет тип int, он ожидает ввода чего-либо.Подсказка говорит пользователю ввести символ, и они делают.Код видит символ, и, поскольку он не был int, ничего не читается, и значение ch правильно определено вашим кодом как не y, Y, n или N. Если вы хотитеcin символ, объявить char ch;.Если вы хотите иметь int, предложите пользователю ввести число.

0 голосов
/ 01 июня 2018

Проблема появляется очень рано:

int ch; // are you sure this should be an int?
cout << "Do you have any extra credit points? (Enter Y/y or N/n)" << endl;
cin >> ch;

cin ведет себя по-другому на int типизированных переменных, чем на char с.Когда вы вводите «y» или «n» на клавиатуре, cin не будет работать.

Вы можете проверить, не удалось ли cin, вызвав его метод fail(), например:

int num;
std::cout << "Enter a number: ";
std::cin >> num;
if (std::cin.fail()) {
    std::cout << ":(" << std::endl;
} else {
    std::cout << "Your number was " << num << std::endl;
}
...