2012-10-08 101 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的额外调用可能会使寄存器或堆栈值变脏,这将改变函数的行为方式。

严格地说,这是一个未定义的行为,您刚刚获得了关于未定义行为如何看起来像一个教训 - 不相关的函数调用更改未定义行为的行为方式。