条件不起作用,谁能解释这是为什么?

时间:2020-01-31 22:54:37

标签: c++

我刚刚开始学习C ++,所以我确定我显然缺少这方面的东西。如果有人能启发我,我会喜欢的。谢谢!

我正在尝试在c ++中创建一个循环来检查变量的char值(它可以是这些“ Y”,“ y”,“ N”,“ n”中的任何一个),如果以下情况返回错误消息:按下了错误的字符,并要求用户输入新的字符。如果输入正确,则应继续。

由于某种原因,即使输入正确,也会显示错误消息,这使我陷入无限循环。

char answer{' '};        // Initialize char with nothing.
std::cin>>answer;        // take user input 

while (answer != 'n' || answer != 'N' || answer != 'Y' || answer != 'y') 
{
    std::cout<<"Error: Please press 'Y' for yes and 'N' for no, followed by 'ENTER'. \n";
    std::cin>>answer;
}

4 个答案:

答案 0 :(得分:3)

考虑一下表达式answer != 'n' || answer != 'N',因为answer不能同时位于'N''n',所以这始终是正确的,{ {1}}将始终与answer不同或与'n'不同。明白我的意思吗?

答案 1 :(得分:2)

更改||至 &&。如果char不是'n'并且char不是'N'并且char不是'Y'并且char不是'y'然后显示错误。

答案 2 :(得分:2)

请使用And条件更改您的Or条件。

#include <iostream>
using namespace std;

int main()
{
    char answer{' '};
    std::cin>>answer;

    while (answer != 'n' && answer != 'N' && answer != 'Y' && answer != 'y') 
    {
        std::cout<<"Error: Please press 'Y' for yes and 'N' for no, followed by 'ENTER'. \n";
        std::cin>>answer;
    }
    return 0;
}

答案 3 :(得分:1)

我要加上括号:

do { 
    std::cin>>answer 
} while ((std::toupper(answer) != 'N') && (std::toupper(answer) != 'Y'));

操作员具有优先权,使用Beta编译器时可能会引入一些微妙的错误。

相关问题