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和为其指定的格式说明符中的任何不匹配都会导致未定义的行为

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 回答