Scanf似乎工作不正常,或者我做错了什么

时间:2014-10-06 01:00:40

标签: c scanf

所以我试图做一个简单的程序找到任何两个值的最大公分母,但它一直给我这个错误信息,

“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); 
对于各种各样的事情,但它仍然无效。

3 个答案:

答案 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,则程序将崩溃。