2012-01-01 98 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

相關問題