2012-01-01 84 views
1

该程序非常简单,它提供了最大的公约数作为输出。我已验证了我的算法。编译器没有发生错误,但仍然是不会产生任何输出。该代码在编译时没有显示任何错误,但没有显示任何输出

#include<conio.h> 
#include <stdio.h> 
int gcd(int ,int); 
int main() 
{ 
    int a,b,j; 
    printf("enter two numbers"); 
    scanf("%d\n",&a); 
    scanf("%d\n",&b); 
    j=gcd(a,b); 
    printf("gcd is %d",j); 
    getch(); 
    return 0; 
} 
int gcd(int x, int y) 
{ 
    int temp,c; 
    if(x<y) 
    { 
      temp=x; 
      x=y; 
      y=temp; 
      } 
    if(y<=x&&(x%y==0)) 
    return y; 
    else 
    { temp=x%y; 
     c=gcd(y,temp); 
     return c; 

     } 
} 
+2

供参考:通常情况下,如果你有'X> y'上的条目,那么第一次迭代(递归调用)解决了这个问题,所以您不必为特殊情况。另外,一般来说,您将使用迭代算法而不是尾递归算法。 (您是否猜测过GCD(34533,1279)== 1279?也不是我!)另外,'scanf(“%d \ n”,&var)'操作应该被错误检查并且最后的'\ n'意味着您必须在输入终止之前在第二个数字后输入一些非空格字符。 – 2012-01-01 23:26:30

+1

@ Karanv.10111关于'scanf'和'\ n'你可以在clc中阅读这个问题常见问题解答http://c-faq.com/stdio/scanfhang.html – ouah 2012-01-01 23:44:59

回答

1

问题是

scanf("%d\n",&a); 
scanf("%d\n",&b); 

删除\n,只是

scanf("%d",&a); 
scanf("%d",&b); 

是OK

2

这可能是由于缓冲输出。添加\nprintfs,看看它是否修复它:

printf("enter two numbers\n"); 
printf("gcd is %d\n",j); 

或者,你可以调用添加到fflush(stdout)刷新输出缓冲区:

printf("enter two numbers"); 
fflush(stdout); 

printf("gcd is %d",j); 
fflush(stdout); 

除此之外,它(几乎)在我的设置中按预期工作:

enter two numbers 
4783780 
354340 
1 
gcd is 20 

唯一的薄g是\n强制它读取一个额外的字符。 (我选择是1

+0

是的,但是stdio缓冲区无论如何都会被刷新退出,不是? – cnicutar 2012-01-01 23:12:50

+0

@cnicutar:也许OP不会让它运行那么久,并且正在杀死它...... – 2012-01-01 23:13:38

+1

OP有一个'getch();'它可以阻止它退出。 (我认为...) – Mysticial 2012-01-01 23:14:09

0

这条线:

printf("enter two numbers"); 

不打印一个新行字符(\n)等输出不刷新到控制台。

尝试printf后添加此:

fflush(stdout); 
0
scanf("%d\n",&a); 
scanf("%d\n",&b); 

scanf("%d%*c",&a); 
scanf("%d%*c",&b); 
+0

%* c ??这是什么?.. :) – 2012-01-02 20:56:11

+0

@ Karanv.10111 drop'\ N” – BLUEPIXY 2012-01-02 22:22:43

相关问题