为什么在o / p中i的值是不同的

时间:2012-09-27 08:06:09

标签: c

为什么我得到了不同的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);
}

2 个答案:

答案 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段):

  

如果转换规范无效,则行为未定义。 如果任何参数不是相应转换规范的正确类型,则行为未定义。

强调我的。

Source

答案 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);'