用c语言打印双变量字符

用c语言打印双变量字符,c,printf,C,Printf,为什么?printf不是类型安全的! 传递给printf的实际类型与为其指定的格式说明符中的任何不匹配都会导致未定义的行为 sign1和sign2被声明为char,因此使用%f会导致未定义的行为 您将参数的顺序弄乱到printf (x 0.000)^2 + (y 0.000)^2 = 9.000^2 应该是: printf("(x %c %.3lf)^2 + (y %c %.3lf)^2=%.3lf^2\n",x,sign1,y,sign2,radius); printf不是类型安

为什么?

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

sign1
sign2
被声明为
char
,因此使用
%f
会导致未定义的行为


您将参数的顺序弄乱到
printf

(x   0.000)^2 + (y   0.000)^2 = 9.000^2
应该是:

printf("(x %c %.3lf)^2 + (y %c %.3lf)^2=%.3lf^2\n",x,sign1,y,sign2,radius);
printf
不是类型安全的! 传递给
printf
的实际类型与为其指定的格式说明符中的任何不匹配都会导致未定义的行为

sign1
sign2
被声明为
char
,因此使用
%f
会导致未定义的行为


您将参数的顺序弄乱到
printf

(x   0.000)^2 + (y   0.000)^2 = 9.000^2
应该是:

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);
将此行更正为

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

printf
的参数顺序与其格式规格不匹配请尝试
sign1,x,sign2,y,radius
获取参数,可能是“printf函数工作不正常”-而是“我无法正确使用printf函数”“
printf
的参数顺序与其格式规格不匹配尝试
sign1,x,sign2,y,radius
参数可能是?”“printf函数工作不正常”-而是“我无法正确使用printf函数”…有趣的是,对于我的gcc,UB会产生预期的输出,因为浮点参数是在浮点寄存器中传递的:-另一件有趣的事是,在我的gcc中,UB会产生预期的输出,因为浮点参数是在浮点寄存器中传递的:-o