首页 > 解决方案 > 如何用我自己的错误替换“浮点异常”错误

问题描述

我有一个学校的作业,我将输入 2 个数字,即 5 和 0,然后将其除以显示结果"Result is undefined - division by 0 is encountered"

这是我的代码:

#include <stdio.h>

int main() {
    int num, num2, sum, diff, pro, quo;
    int operation;
    
    printf("Enter 1st num: ");
    scanf("%d", &num);
    printf("Enter 2nd num: ");
    scanf("%d", &num2);
    printf("Choose Operation: ");
    printf("\n [1] Addition \n [2] Subtraction \n [3] Multiplication \n [4] Divison \n");
    printf("Choice: ");
    scanf("%d", &operation);
    
    sum = num + num2;
    diff = num - num2;
    pro = num * num2;
    quo = num / num2;
    
    switch(operation)
    {
    case 1:
        printf("Result of adding %d and %d is %d", num, num2, sum);
        break;

    case 2:
        printf("%d - %d = %d", num, num2, diff);
        break;

    case 3:
        printf("%d * %d = %d", num, num2, pro);
        break;

    case 4:
        switch(operation)
        {
        case 4:
            printf("%d / %d = %d", num, num2, quo);
            break;
        default:
            printf("Result is undefined - division by 0 is encountered");
        }
        break;
    }
    return 0;
}

标签: cdivide-by-zero

解决方案


该消息可能是由于发出的SIGFPE信号而引发的。通过包含<signal.h>,您可以处理信号并打印您自己的消息。这是一个例子。

#include <signal.h>
#include <stdlib.h>

void handle(int sig)
{
    puts("Result is undefined");
    exit(1);
}

int main(void)
{
    signal(SIGFPE, handle);
    int a = 5 / 0;
}

在正常情况下,这Floating point exception是为我打印的,但是使用信号处理程序,它会打印一条自定义消息然后退出。对我来说,如果我在打印后不立即退出,它会无限打印我的自定义消息,因此删除exit(1)可能不是最好的主意。不幸的是,您无法确定信号是否是由于除以 0 错误而引发的,但在您的程序中,这可能是唯一的原因。

或者,您也可以在尝试除法之前检查除数是否为 0,在这种情况下,您可以确定这将是除以 0 的错误。


推荐阅读