c中未显示的printf语句

时间:2015-12-27 19:32:03

标签: c pointers function-pointers

我正在制作一个小程序,将摄氏温度转换为华氏度和开尔文度 它使用一个函数,它将指向int的指针作为参数并返回Fahrenait。当程序结束时,我必须更改akc整数的值,这是我将摄氏温度保存为开尔文度的地方 这就是我所做的。

float thermo(int *);
int main(){
    int akc;
    akc=100;
    printf("%dce = %f = %dK\n",akc,thermo(&akc),akc);
    system("pause");
    return 0;
}
float thermo(int *akc){
    float a=*akc;
    *akc+=273;
    return 9*a/5+32;
}

我的问题是,当我打印所有值时,我得到以下输出:

373摄氏度= 212.000000华氏度= 100开尔文

但结果应为

100摄氏度= 212.000000华氏度= 373开尔文

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

printf("%dce = %f = %dK\n",akc,thermo(&akc),akc);

函数参数的评估顺序在C中未指定。您不能假设将评估第一个参数,然后是第二个,等等。要解决此问题,您可以将结果保存在临时变量中。