[英]Floating-point exception from fraction simplification program in C
When I run the following code, I always get a floating-point exception. 当我运行以下代码时,我总是会得到一个浮点异常。 How can I fix it?
我该如何解决?
#include <stdio.h>
//Global Variables
int num, denom, num1, denom1;
void simplify(int *numerator, int *denominator);
int main () {
//Prompt User as to what program is
printf("Fraction Simplifier\n");
printf("===================\n");
//Ask User for Numerator and Denominator
printf("Numerator: ");
scanf("%d", &num);
printf("Denominator: ");
scanf("%d", &denom);
//Call Function
simplify(&num1, &denom1);
//Display final output
printf("%d / %d = %d / %d", num, denom, num1, denom1);
return 0;
}
//Simplify function
void simplify(int *numerator, int *denominator)
{
num = num1;
denom = denom1;
num1 = num1 / num1;
denom1 = denom1 / num1;
num1 = *numerator;
denom1 = *denominator;
}
It looks as if num1
is never initialized. 似乎
num1
从未被初始化。 It will be zero, which will result in a division by zero. 它将为零,这将导致被零除。
Your simplify
function is flawed. 您的
simplify
功能存在缺陷。 Here's what it means when you are calling simplify
: 这就是调用
simplify
时的含义:
call simplify, passing the address of num1 and denom1
调用simple,传递num1和denom1的地址
And here's what your code inside of simplify means: 这就是您的简化代码的含义:
num = num1; /* Assign the value of num1 to num, meaning set num to 0. */
denom = denom1; /* Assign the value of denom1 to denom, meaning set denom to 0. */
num1 = num1 / num1; /* Divide num1 (which is 0) by num1 (which is 0). Error! */
You can simplify your program and make it easier to understand by eliminating your global variables. 您可以通过消除全局变量来简化程序并使之更易于理解。 This will also help you to correct your errors.
这也将帮助您纠正错误。 Here's a rewrite:
这是一个重写:
#include <stdio.h>
void simplify(int numerator, int denominator, int* newNumerator, int* newDenominator);
int main () {
int num, denom, num1, denom1;
/* Do your input code */
//Call Function
simplify(num, denom, &num1, &denom1);
//Display final output
printf("%d / %d = %d / %d", num, denom, num1, denom1);
return 0;
}
//Simplify function
void simplify(int numerator, int denominator, int* newNumerator, int* newDenominator)
{
int simplifiedNumerator;
int simplifiedDenominator;
/* Calculate your results.. left out your original code, which calculates incorrectly */
/* You will refer to the ints numerator and denominator */
/* Assign your results */
*newNumerator = simplifiedNumerator;
*newDenominator = simplifiedDenominator;
}
Notice that simplify
now has four parameters. 注意,
simplify
现在有四个参数。 The first two are the values you want to use in the calculation (we don't need pointers), and the pointers are only used to assign the results to the addresses passed in. 前两个是您要在计算中使用的值(我们不需要指针),并且指针仅用于将结果分配给传入的地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.