【发布时间】:2016-08-25 06:39:35
【问题描述】:
我写了以下几行代码。
#include "stdio.h"
int main(){
float t,res;
char c;
scanf("%f",&t);
getchar();
scanf("%s",&c);
if (c=='R') res = 4/5 * t;
else if (c=='F') res = (9/5 * t) + 32;
else if (c=='K') res = t + 273;
printf("%.2f",&res);
return 0;
}
我不知道为什么当我给出 t = 25 和 c = 'R' 时输出显示为 0.00。控制台如下所示。
25
R
0.00
谁能给我一个解释?
【问题讨论】:
-
printf()期望res,而不是&res。 -
scanf("%s",&c);-->scanf(" %c",&c); -
"当我给 t = 25 和 c = 'R'" 怎么样?如果您从标准输入而不是调试器输入
R,您将通过访问超出范围来调用未定义行为。应该使用%c而不是%s来读取一个字符。 -
也许需要
c = getchar();而不是scanf("%s",&c); -
整数除法:
res = 4/5 * t;应该是res = 4.0/5.0 * t;或类似于强制浮点除法的东西。在你想要的浮点运算中使用浮点常量——使用整数会带来问题。此外,最好用换行符结束打印操作。