首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我不明白为什么这段代码给了我乘法,除法和减法的错误结果?

我不明白为什么这段代码给了我乘法,除法和减法的错误结果?
EN

Stack Overflow用户
提问于 2020-02-26 18:57:52
回答 2查看 87关注 0票数 0

我不明白为什么这段代码给了我乘法、除法和减法的错误结果?它给我任何乘法运算的结果是零,任何除法误差的结果,最后减法的结果总是1。

代码语言:javascript
运行
复制
#include <stdio.h>
long operations(char x,int num1 ,int num2 );

int main(void) {
    char x;
    int num1 , num2;
    long result;
    setbuf(stdout,NULL);
    result=operations(x,num1 ,num2 );

}
long operations(char x,int num1 ,int num2 )
{
    printf("please enter your operation sum (1) ,subtrcation(2),mul(3),div(4) :");
    scanf("%d",&x);

    if (x==(1||2||3||4))
    {
    printf("please enter the first and second numbers : \n ");
    scanf ("%d%d" ,&num1 ,&num2);
    }
    else
    {
        printf("error ") ;
    }

    switch (x)
    {
    case 1:
    {
        return  printf("the result  sum is  :%d ",(num1+num2)) ;

    }
    case 2:
    {
        return  printf("the result of subtraction  is :%d ",(num1-num2)) ;

    }
    case 3:
        {
            return  printf("the result multiblication is :%d ",(num1*num2)) ;

        }
    case 4:
        {
            return  printf("the result division  is :%d ",(num1/num2)) ;

        }




    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-26 19:13:12

您不能“重构”您的条件x==(1||2||3||4)

您需要显式地编写x == 1 || x == 2 || x == 3 || x == 4

编译器理解“如果x等于1,或者x等于2,等等”。

它不理解“如果x等于1234

任何与零不同的数字都被认为是true,因此1||2||3||41相同。

如果你愿意,你可以写x >= 1 && x <= 4。您只检查下界和上界。

此外,别忘了检查num2在除法方面是否与0不同。否则,你的程序就会崩溃。

票数 5
EN

Stack Overflow用户

发布于 2020-02-26 19:43:01

正如@chux已经提到的,这个if语句总是正确的,因为true的意思是!= 0。因此,每个不等于0的数字都将匹配该条件。

@Haltarys已经建议的解决方案的另一种方法是另一种switch --这可能会提高可读性:

代码语言:javascript
运行
复制
switch(x)
{
case 1: // fallthrough
case 2: // fallthrough
case 3: // fallthrough
case 4:
    printf("please enter the first and second numbers : \n ");
    scanf ("%d%d" ,&num1 ,&num2);
    break;
default:
    printf("error ");
    // consider returning here instead of break because you have no return below for this case
    break;
}

由于这些情况与您的switch中的情况相同,所以可能会考虑将它们组合起来。

关于您的代码的其他一些提示:

  • 考虑如果您的初始状态失败会发生什么(例如,x == 5)--然后您将打印错误消息,但是您的switch缺少一个default语句,因此缺少一个return值。你的编译器应该抱怨这一点。(double)num1 / num2
  • You
  • 您的部门不会打印您想要的结果,因为您打印的是%d,这意味着该值将被抛出,您也不会打印小数--而是使用%.2f,例如,在小数点之后获取2位数字,并转换为num1,这样就不会得到int结果:

不会返回您的数学操作的结果,而是被调用的printf的返回值,即打印字符的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60420723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档