#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
为什么?
答案 0 :(得分: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);
答案 1 :(得分:1)
将此行更正为
printf("(x %c %.3lf)^2 + (y %c %.3lf)^2=%.3lf^2\n",sign1,x,sign2,y,radius);