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

にFYI:通常、あなたが持っている場合は、 'x>のy'あなたはそのための特別なケースを必要としないので、エントリには、最初の反復(再帰呼び出し)は、問題を修正します。また、一般に、テール再帰アルゴリズムではなく反復アルゴリズムを使用します。 (あなたはGCD(34533,1279)== 1279かそれとも私ですか?)また、 'scanf("%d \ n "、&var)'演算はエラーをチェックし、最後に '\ n'入力が終了する前に2番目の数字の後に空白以外の文字を入力する必要があることを意味します。 –

+1

@ Karanv.10111については、 'scanf'と' \ n'を参照してください。この質問はclc FAQ http://c-faq.com/stdio/scanfhang.html – ouah

答えて

1

問題は、\n削除

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

あるだけ

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

はOKです

2

出力のバッファリングが原因である可能性があります。それはほとんど(、それ以外

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

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

:あなたのprintfs\nを追加し、それを修正するかどうかを確認:

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

また、あなたは出力バッファをフラッシュするfflush(stdout)に呼び出しを追加することができます)は私のセットアップで意図どおりに動作します:

enter two numbers 
4783780 
354340 
1 
gcd is 20 

唯一の薄いgは、\nが追加の文字を強制的に読み取ることです。このライン

+0

で読むことができますが、stdioバッファはプログラム出る? – cnicutar

+0

@cnicutar:おそらく、OPはそれを長く実行させず、それを殺しているでしょう... –

+1

OPには、終了できないようにするための 'getch();'があります。 (私は思う...) – Mysticial

0

(これは私が1なることを選んだ):

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 ??これは何ですか?.. :) –

+0

@ Karanv.10111 drop '\' n ' – BLUEPIXY

関連する問題