浮点异常(内核转储)-c程序

浮点异常(内核转储)-c程序,c,C,我对我的一项任务有一个问题: 编写一个程序,允许用户键入表单的简单表达式 号码操作员号码 程序计算表达式并在终端显示结果,精确到小数点后两位 但是,该程序只允许调用scanf函数一次 #包括 内部主(空) { 整数num1,num2,和,差,积,商; num1=0; num2=0; printf(“输入表达式”); scanf(“%d%d”、&num1、&num2); 总和=num1+num2; 差值=num1-num2; 乘积=num1*num2; 商=num1/num2; 开关(num1)

我对我的一项任务有一个问题:

  • 编写一个程序,允许用户键入表单的简单表达式 号码操作员号码
  • 程序计算表达式并在终端显示结果,精确到小数点后两位
  • 但是,该程序只允许调用scanf函数一次
    #包括
    内部主(空)
    {
    整数num1,num2,和,差,积,商;
    num1=0;
    num2=0;
    printf(“输入表达式”);
    scanf(“%d%d”、&num1、&num2);
    总和=num1+num2;
    差值=num1-num2;
    乘积=num1*num2;
    商=num1/num2;
    开关(num1){
    案例2:printf(“%d/%d=%d”,num1,num2!=0,商);
    打破
    案例1:printf(“%d*%d=%d”,num1,num2,产品);
    打破
    案例0:printf(“%d-%d=%d”,num1,num2,差异);
    打破
    默认值:printf(“%d+%d=%d”,num1,num2,sum);
    打破
    }       
    }   
    
    程序可以编译,但当我运行它时,会显示以下消息:

    浮点异常(内核转储)


    这是什么意思?另外,如果还有什么问题,请告诉我。

    我想这就是您需要的

       #include <stdio.h>
    
        int main(void)
        {
            int num1=0, num2=0;
            char operation= ' ';
    
            printf("type in expression\n");
            scanf("%d %c %d", &num1, &operation, &num2);
    
            switch (operation) {
                case '/': {
                            if(0 == num2) //This is the solution for your issue.
                            {
                                printf("\nCan not perform %d/%d", num1, num2);
                            }
                            else
                            {
                                printf("\n%d / %d=%d", num1, num2, num1/num2);
                            }
                        }
                        break;
                case '*': printf("\n%d * %d=%d", num1, num2, num1*num2);
                            break;
                case '-': printf("\n%d - %d=%d", num1, num2, num1-num2);
                            break;
                case '+': printf("\n%d + %d=%d", num1, num2, num1+num2);
                            break;
                default: printf("\nInvalid operation[%c]", operation);
                            break;
            } 
            return 0;      
        } 
    
    #包括
    内部主(空)
    {
    int num1=0,num2=0;
    字符操作=“”;
    printf(“在表达式中键入\n”);
    scanf(“%d%c%d”、&num1、&operation、&num2);
    开关(操作){
    案例“/”:{
    if(0==num2)//这是您问题的解决方案。
    {
    printf(“\n不能执行%d/%d”,num1,num2);
    }
    其他的
    {
    printf(“\n%d/%d=%d”,num1,num2,num1/num2);
    }
    }
    打破
    案例'*':printf(“\n%d*%d=%d”,num1,num2,num1*num2);
    打破
    案例'-':printf(“\n%d-%d=%d”,num1,num2,num1-num2);
    打破
    大小写“+”:printf(“\n%d+%d=%d”,num1,num2,num1+num2);
    打破
    默认值:printf(“\n无效操作[%c]”,操作);
    打破
    } 
    返回0;
    } 
    
    输入是什么?该输入的预期输出是什么?这意味着
    num2
    很可能是0,被0除是一个问题。顺便问一下:如何在这里获得“浮点异常”。我在您的程序中没有看到任何
    float
    double
    。您确定正在运行的程序就是您发布在此处的程序吗?您没有从用户处读取运算符。@MichaelWalz整数除以0通常被报告为“浮点异常”。这条消息有误。对不起。“但我刚刚回答了他的问题。”迈克尔瓦尔兹说。理解。我不知道这件事。我以后会小心的。
       #include <stdio.h>
    
        int main(void)
        {
            int num1=0, num2=0;
            char operation= ' ';
    
            printf("type in expression\n");
            scanf("%d %c %d", &num1, &operation, &num2);
    
            switch (operation) {
                case '/': {
                            if(0 == num2) //This is the solution for your issue.
                            {
                                printf("\nCan not perform %d/%d", num1, num2);
                            }
                            else
                            {
                                printf("\n%d / %d=%d", num1, num2, num1/num2);
                            }
                        }
                        break;
                case '*': printf("\n%d * %d=%d", num1, num2, num1*num2);
                            break;
                case '-': printf("\n%d - %d=%d", num1, num2, num1-num2);
                            break;
                case '+': printf("\n%d + %d=%d", num1, num2, num1+num2);
                            break;
                default: printf("\nInvalid operation[%c]", operation);
                            break;
            } 
            return 0;      
        }