【问题标题】:OR operator in CC中的OR运算符
【发布时间】:2018-04-17 13:18:14
【问题描述】:

我试图用 C 语言制作一个计算器。 我写了那个代码

#include <stdio.h>

int main()
{
    char proc;
    float x,y,z;
    printf("Enter the proccess you need to do :\nA) +\nB) -\nC) *\nD) /\n>>>  ");
    scanf("%c", &proc);
    if (proc !='A' || proc !='a' || proc !='B' || proc !='b' || proc !='C' || proc !='c' || proc !='D' || proc !='d' )
    {
            printf("enter a valid charecter.\n");
            return 0;
    }
    else 
    printf("Enter your first number: ");
    scanf("%f", &x);
    printf("Enter your seconde number: ");
    scanf("%f", &y);

    //Start of IF statment 
    if (proc =='A' || proc == 'a')
    {
            z = x+y;
            printf("The sum is %.2f:\n",z);
    }
    else if (proc =='B' || proc == 'b')
    {
            z = x-y;
            printf("The sum is %.2f:\n",z);
    }
    else if (proc =='B' || proc == 'b')
    {
            z = x*y;
            printf("The sum is %.2f:\n",z);
    }
    else if (proc =='B' || proc == 'b')
    {
            z = x/y;
            printf("The sum is %.2f:\n",z);
    }
    else   printf("Enter a valid charecter.\n");
            //End of IF statment
    return 0;
}

但是当我尝试运行它并尝试例如 A 时,它显示“输入有效字符”。如果我键入非这些字符 A、B、C、D 也是小写的,我需要它。 我做错了吗?

【问题讨论】:

  • 如果proc 不等于'A'proc 不等于'a' 总是正确的。稍微思考一下逻辑
  • proc != 'A' || proc != 'a' ... 更改为proc != 'A' &amp;&amp; proc != 'a' ...
  • 您可能还想更正一些文本。现在所有案例都说The sum is ...
  • 离题:1)第一个else可以删除2)总是检查scanf返回的值3)你检查Bb三个地方4)最后一个elseprintf可以删除

标签: c operator-keyword


【解决方案1】:

是的,你想错了。思考逻辑:

proc !='A' || proc !='a' || ...

以您输入“A”的示例为例。然后你评估为:

false || true || ...

true ||任何事情都是真的,所以你有问题。你想要&amp;&amp;

【讨论】:

    【解决方案2】:

    虽然正确答案已经在cmets中,但我告诉你正确的做法。

    首先,你检查了许多不必要的条件,你可以简单地做这样的事情:

    // Check here about this function : https://stackoverflow.com/questions/2661766/c-convert-a-mixed-case-string-to-all-lower-case
    proc = tolower(proc);
    

    然后只检查 4 个条件,您正在检查 4*2, 8 个条件

    // Using '&&' here will solve your problem.
    if(proc != 'a' && proc != 'b' && proc != 'c' && proc != 'd')
    

    如果你会学习switch case,这整个程序也可以向下钻取。

    【讨论】:

    • 编程中没有单一的“正确方法”。可以通过多种方式解决特定问题。最佳解决方案取决于您的优先事项。编写更短的代码并不总是“正确/最佳方式”。顺便说一句:您的代码可能会更短:if (proc &lt; 'a' || proc &gt; 'd')
    猜你喜欢
    • 2010-10-23
    • 2015-07-08
    • 2021-11-08
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2016-05-31
    相关资源
    最近更新 更多