为什么我得到了不同的i值。
#include <stdio.h>
void pri(int,int);
int main()
{
float a=3.14;
int i=99;
pri(a,i);
getch();
}
void pri(int a,int i)
{
printf("a=%f i=%d\n",a,i);
printf("i=%d a=%f\n",i,a);
}
答案 0 :(得分:3)
您将a
声明为int,但您使用的是%f
,因此应将其声明为float:
void pri(float a, int i)
{
printf("a=%f i=%d\n", a, i);
printf("i=%d a=%f\n", i, a);
}
如果您的类型不正确,则会出现未定义的行为。 printf
的规范读取(7.19.6.1第9段):
如果转换规范无效,则行为未定义。 如果任何参数不是相应转换规范的正确类型,则行为未定义。
强调我的。
答案 1 :(得分:0)
解释你的评论问题:
printf("a=%f i=%d\n", a, i);
将评估为:
printf("a=");
printf(/*next arguments up to size of float*/ a, i);
printf(" i=");
printf(/*...decimal*/ /*whatever is on the stack, because a and i are already consumed*/);
你可以用以下方法拯救你的功能:'printf(“a =%f i =%d \ n”,(float)a,i);'