C代码的非逻辑输出

Pas*_*jas 1 c pointers char nested-if

我写了一些以下代码.

#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;
}
Run Code Online (Sandbox Code Playgroud)

当我给出t = 25和c ='R'时,我不知道为什么输出显示为0.00.控制台看起来像这样.

25
R
0.00
Run Code Online (Sandbox Code Playgroud)

有人会给我一个解释吗?

Mik*_*CAT 5

  • scanf("%s",&c);有很大的机会导致超出范围的访问,这会调用未定义的行为.使用scanf("%c",&c);(%c而不是%s)只读取一个字符.
  • printf("%.2f",&res);将通过传递具有错误类型的数据来调用未定义的行为printf().使用printf("%.2f",res);(不&)打印具有类型double(或float将自动转换为double可变长度参数)的数据
  • 表达res = 4/5 * tres = (9/5 * t) + 32可能不是你想要做什么,因为4/59/5是整数除法,其中剩余物被截断.尝试使用res = 4.f/5 * tres = (9.f/5 * t) + 32
  • 您应该检查是否scanf()s为成功并读取数据是为了不调用有效未定义行为通过使用具有自动存储时间未初始化的变量,这是不确定的值.