-1

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

2 回答 2

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

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

强调我的。

来源

于 2012-09-27T08:07:41.597 回答
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=%fi=%d\n", (float)a, i);'

于 2012-09-27T08:35:25.880 回答