2012-10-08 100 views
0

我試圖寫在C.問題的代碼的代碼如下:printf的意外停止工作

#include<stdio.h> 
int cop(int a,int b) 
{ 
    int c,d,e,f,g; 
    if(a>b) 
    { 
     c=a; 
     a=b; 
     b=c; 
    } 
    while(c!=0) 
    { 
     c=b%a; 
     b=a; 
     a=c; 
    } 
    return b; 
} 

int main() 
{ 
    int i=1, j=1, k, a, b, c, d, e, f, g=1; 

    scanf("%d",&k); 
    int q=0; 
    for(q=k;q>0;q--) 
    { 
     scanf("%d",&a); 
     while(g==1) 
     { 
      b=j+i; 
      i=j; 
      j=b; 
      g=cop(j,a); 
      printf("%d\n",g); 
     } 
     printf("%d %d\n",g,j); 
     j=1;i=1;g=1; 
    } 

return 0; 
}  

當我給輸入作爲3 3 5 161它打印

1 
3 
3 3 
1 
1 
5 
5 5 
1 
1 
1 
1 
1 
7 
7 21 

當我發表聲明printf("%d\n",g)並執行相同的輸入我得到的輸出如下:

3 3 
5 3 
161 3 

所以,我的疑問是,爲什麼我沒有收到: -

3 3 
5 5 
7 21 
+1

這不是一個「懷疑」。 – unwind

+0

那麼你想要做什麼?通過閱讀你的代碼我無法理解。輸入「3 3 5 161」後我得到了不同的結果。 – halfelf

+0

聽起來你應該用附加的調試器來運行你的代碼。 – RichardTowers

回答

7
foo.c: In function 'cop': 
foo.c:4: warning: 'c' may be used uninitialized in this function 

這是否幫助?

您取決於函數中的未初始化值(在某些情況下)。這意味着對printf的額外調用可能會使寄存器或堆棧值變髒,這將改變函數的行爲方式。

嚴格地說,這是一個未定義的行爲,您剛剛獲得了關於未定義行爲如何看起來像一個教訓 - 不相關的函數調用更改未定義行爲的行爲方式。