0
#include<stdio.h>
#include<math.h>
int main()
{
    char sign1='-',sign2='-' ;

    double x=-1,y=4,radius=9;

        if(x<0.0)
        {
            sign1='+';
            x=x*-1;
        }
        if(y<0.0) {
            sign2='+';
            y=y*-1;
        }

        printf("(x %c %.3lf)^2 + (y %c %.3lf)^2=%.3lf^2\n",x,sign1,y,sign2,radius);//here doesn't print the values of sign1 and sign2

        printf("%c %c\n",sign1,sign2);//here prints properly;

    return 0;
}

私のコードでは、最初のprintf関数が正しく動作しません。印刷する必要があります(x + 1.000)^2 + (y - 4.000)^2 = 9.000^2が、得られる出力は

(x   0.000)^2 + (y   0.000)^2 = 9.000^2

なんで?

4

2 に答える 2

2

printfタイプセーフではありません!

に渡される実際の型printfと、それに指定された書式指定子が一致しないと、 Undefined Behaviorが発生します。

sign1未定義の動作の結果を使用してそのようにsign2宣言されています。char%f


パラメータの順序をprintf

printf("(x %c %.3lf)^2 + (y %c %.3lf)^2=%.3lf^2\n",x,sign1,y,sign2,radius);

次のようにする必要があります。

printf("(x %c %.3lf)^2 + (y %c %.3lf)^2=%.3lf^2\n",sign1,x,sign2,y,radius);
于 2012-12-31T06:52:59.093 に答える
1

この行を次のように修正します

printf("(x %c %.3lf)^2 + (y %c %.3lf)^2=%.3lf^2\n",sign1,x,sign2,y,radius);
于 2012-12-31T06:55:48.733 に答える