gpt4 book ai didi

c++ - 浮点异常错误

转载 作者:太空狗 更新时间:2023-10-29 20:38:22 25 4
gpt4 key购买 nike

此程序编译正常,但在我运行时返回消息“浮点异常”。我查看了其他线程,问题似乎是除以 0,但我查看了程序,整个程序中没有被零除。我什至使用了绝对值函数以防万一。

顺便说一句,该程序旨在减少分数。

示例输入:6 12,代表分数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;
}

最佳答案

您的主要问题是您没有传递输入值 num1num2进入你的reduce()功能。相反,您传递的是全局变量 higherlower .您没有为它们分配任何值,但默认情况下全局变量始终初始化为 0。因此,您会遇到异常,因为在 reduce() 中您将 0 除以 0。您可以使用调试器验证这一点。

如果我改变你的main()如下所示,那么您的代码至少适用于 6 的测试用例和 12作为输入:

int main(void)
{
do
{
printf("enter 2 numbers: ");
scanf("%d %d", &num1, &num2);
reduce(num1, num2, &higher_2, &lower_2);
printf("enter 0 to end program and any number continue: \n");
scanf("%d", &x);
} while(x != 0);

return 0;
}

输出:

enter 2 numbers: 6
12
The GCD is 1/2
enter 0 to end program and any number continue:


如评论中所述,您还应该摆脱全局变量和虚假变量。因此,您应该首先删除代码中的以下行:

/*declaring variables*/
int num1, num2, num1b, num2b, gcd, x;
int higher, lower, higher_2, lower_2;

然后让你的main()函数启动方式如下:

int main(void)
{
int num1, num2, higher_2, lower_2, x;
...
}

还有你的reduce()函数应如下所示:

void reduce(int numerator, int denominator, int *reduced_numerator, int *reduced_denominator)
{
int 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);
}

到目前为止,您还没有使用变量 higher_2lower_2main()功能,但我猜你打算这样做。如果没有,您也可以将它们与 reduce() 的参数 3 和 4 一起删除。功能。


您提供的代码还有另一个问题(感谢@user3629249 指出):您缺少 abs() 的包含功能。所以你需要添加行 #include <stdlib.h>在代码的开头(include <math.h> 也将如此,Windows 上也是 include <Windows.h>)。

关于c++ - 浮点异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com