在c中打印带有双变量的字符

时间:2012-12-31 06:50:57

标签: c printf

#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

为什么?

2 个答案:

答案 0 :(得分:2)

printf不是类型安全的!

传递给printf的实际类型中的任何不匹配以及为其指定的格式说明符都会导致未定义的行为

sign1sign2被声明为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);

答案 1 :(得分:1)

将此行更正为

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