我正在尝试为C中的问题编写代码.代码如下:
#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;
}
Run Code Online (Sandbox Code Playgroud)
当我3 3 5 161打印输入时
1
3
3 3
1
1
5
5 5
1
1
1
1
1
7
7 21
Run Code Online (Sandbox Code Playgroud)
当我注释掉语句printf("%d\n",g)并使用相同的输入执行时,我得到如下输出:
3 3
5 3
161 3
Run Code Online (Sandbox Code Playgroud)
所以,我怀疑的是为什么我没有得到: -
3 3
5 5
7 21
Run Code Online (Sandbox Code Playgroud)
foo.c: In function 'cop':
foo.c:4: warning: 'c' may be used uninitialized in this function
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?
您依赖于函数中未初始化的值(在某些情况下).这意味着对printf的额外调用可能会弄脏寄存器或堆栈值,这将改变函数的行为方式.
严格来说,这是一个未定义的行为,你刚刚学到了未定义行为的样子 - 无关的函数调用改变了未定义行为的行为方式.