0

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;
}       

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
4

1 に答える 1

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

これは役に立ちますか?

関数の初期化されていない値に依存しています(場合によっては)。これは、printfを余分に呼び出すと、レジスタまたはスタック値がダーティになる可能性があり、関数の動作が変わることを意味します。

厳密に言えば、これは未定義の動作であり、未定義の動作がどのように見えるかについてのレッスンを受けました。無関係の関数呼び出しは、未定義の動作の動作を変更します。

于 2012-10-08T13:28:39.613 に答える