【发布时间】:2015-08-10 16:08:20
【问题描述】:
这个程序编译得很好,但是当我运行它时它返回一个消息“浮点异常”。我查看了其他线程,问题似乎是除以 0,但我查看了程序,整个程序中没有除零。我什至使用了绝对值函数以防万一。
顺便说一句,该程序旨在减少分数。
示例输入:612,代表分数6/12
预期输出:1/2
#include <stdio.h>
/*declaring variables*/
int num1, num2, num1b, num2b, gcd, x;
int higher, lower, higher_2, lower_2;
/*declaring functions*/
int find_gcd(int num1, int num2);
void reduce(int numerator, int denominator, int *reduced_numerator, int *reduced_denominator);
int main(void)
{
do
{
printf("enter 2 numbers: ");
scanf("%d %d", &num1, &num2);
reduce(higher, lower, &higher_2, &lower_2);
printf("enter 0 to end program and any number continue: \n");
scanf("%d", &x);
} while(x != 0);
return 0;
}
void reduce(int numerator, int denominator, int *reduced_numerator, int *reduced_denominator)
{
num1=numerator;
num2=denominator;
gcd =find_gcd(numerator, denominator);
*reduced_numerator = (numerator/abs(gcd));
*reduced_denominator = (denominator/abs(gcd));
printf("The GCD is %d/%d\n", *reduced_numerator, *reduced_denominator);
}
int find_gcd(int m, int n)
{
while (n != 0) {
int remainder = m % n;
m = n;
n = remainder;
}
return m;
}
【问题讨论】:
-
整数除法的结果可能会变为零,你考虑过吗?
-
在调试器中运行,并逐行执行代码。如果没有别的,调试器会在异常发生时停止,让你看看它在哪里,以及所涉及的变量的值是什么。
-
使用调试器。您应该能够在调试器中轻松找到问题。
-
虽然问题很容易看出,但是当你调用
reduce函数时,你认为higher和lower的全局变量的值是什么?你在哪里分配给他们? -
避免全局变量,避免不必要的变量(如 num1=numerator)