【问题标题】:Why doesnt the OR logical operator( || ) work?为什么 OR 逻辑运算符( || )不起作用?
【发布时间】:2019-08-08 20:40:24
【问题描述】:

我尝试在 do-while 语句中使用 OR 逻辑运算符,但由于某种原因它不起作用。

它可以不使用 OR 逻辑运算符(仅使用一个语句),否则不行。

int main()
{
    char ansr;

    do
    {
        printf("What do you want to do?\n");
        printf("A = Add Employee\nR = Remove Employee\nE = Exit\n");
        scanf(" %c", &ansr);
    }while(ansr != 'E'||ansr != 'e');

    return 0;
}

每当我写 'E' 或 'e' 时,我都希望程序退出 while 循环,但由于某种原因,它会继续执行 do-while 语句。

【问题讨论】:

  • 条件x != A || x != B 对每个不相等的AB 都为真。你想要&& 而不是||
  • 或者(和等效地)修改逻辑否定的范围:!(ansr == 'E' || ansr == 'e')
  • 如果ansr等于E,它一定不等于e。解决这个问题的最简单方法是使用toupper()tolower()while ( toupper( ansr ) != 'E' ) 之类的东西。
  • 一个技巧是养成大声朗读表达的习惯(或至少在你的脑海中):“当答案不是'E'或答案不是'e'时,循环”。等等,这听起来不对,肯定应该说“答案不是'E'并且答案不是'e'”。
  • (另外,学习一些基本的布尔代数和德摩根定律对程序员来说是个好东西。)

标签: c logical-operators


【解决方案1】:

逻辑或 (||) 表示“如果其中任何一个为真”。在您的情况下,如果输入不是“E”或不是“e”,那么它将执行另一次迭代。这总是正确的,因为即使它是其中之一,也不会是另一个。

您可能正在考虑逻辑与 (&&):

while (ansr != 'E' && ansr != 'e');

这意味着“如果这两个都是真的”。如果 ansr 是 'E' 或 'e',则其中一个子句为假,整个表达式将变为假。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多