如何用我自己的错误替换 "Floating point exception" 错误
How to replace "Floating point exception" error with an error of my own
我有一个学校的作业,我在其中输入 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;
}
该消息可能是由于发出 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 错误。
该错误是由处理器触发的,因为您除以零。如果您在除法之前检查输入,则可以显示您自己的错误。然后只在输入不为零的情况下才做除法,否则还是会报错
我有一个学校的作业,我在其中输入 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;
}
该消息可能是由于发出 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 错误。
该错误是由处理器触发的,因为您除以零。如果您在除法之前检查输入,则可以显示您自己的错误。然后只在输入不为零的情况下才做除法,否则还是会报错