所以我试图做一个简单的程序找到任何两个值的最大公分母,但它一直给我这个错误信息,
“xxx.exe已停止工作。一个问题导致程序无法正常工作。如果解决方案可用,Windows将关闭程序并通知您。”
并崩溃了我的程序。我很困惑,如果您有任何意见,请帮忙!
这是我的代码:
#include <stdio.h>
int main (void) {
int first, second;
//Scans in variables
printf("What numbers would you like to find the GCD of?\n");
scanf("%d%d",&first,&second);
int gcd = (first%second);
//Loop
while (gcd !=0)
{
first = second;
second = (first%second);
gcd = (first%second);
}
//Prints output
printf("Your GCD is: %d", second);
return 0;
}
由于scanf
的问题是我之前见过此错误消息的唯一问题,我尝试更改
scanf("%d%d", &first, &second);
对于各种各样的事情,但它仍然无效。
答案 0 :(得分:4)
您收到divide by zero
错误
在第二个变量之后,第二个变量将为零,因为第一个和第二个变量保持相同的数字 所以第3个陈述给出除以零
first = second;
second = (first%second);
gcd = (first%second);
这是一种计算GCD的方法
int
gcd ( int a, int b )
{
int c;
while ( a != 0 ) {
c = a; a = b%a; b = c;
}
return b;
}
答案 1 :(得分:3)
这与scanf
功能无关。我认为以下代码导致了这个问题:
...
first = second // now first equals second
second = (first % second) // now second is 0
gcd = (first % second) // mod 0, Arithmetic Exception thrown out here
...
问题是你mod 0就像将数字除以0.如果这对你来说不明显,你可以使用调试器来验证这一点。
答案 2 :(得分:0)
您确定这是一个scanf问题。如果second为0,则程序将崩溃。