C语言华氏度转摄氏度代码浮点输出仅显示整数问题求助
问题排查结论
核心原因
你遇到的问题由同一作用域下重复定义同名变量导致:
- 第一版代码里已经在
main函数开头声明了float faren,c;,后续计算温度的代码行又写了float c = (faren - FREEZING_PT)*FACTOR;,属于重复声明变量c。- 若你使用的编译器遵循C99及以上标准:这行代码会创建一个和外层
c同名的独立新变量,你计算的正确结果存储在这个新变量中,但外层原本声明的c始终没有被赋值、处于未初始化的随机状态,你printf语句输出的是外层未初始化的c,因此出现结果异常。 - 若你使用的编译器遵循老旧的C89标准:C89要求所有变量必须在代码块最开头声明,你在
scanf这类执行语句后声明变量本身属于语法错误,部分兼容编译器会直接忽略这行的float关键字,导致赋值逻辑异常,最终得到错误输出。
- 若你使用的编译器遵循C99及以上标准:这行代码会创建一个和外层
- 你修改后的代码删除了第二次声明前的
float关键字,相当于直接给已经声明完成的变量c赋值,逻辑完全正确,即可正常输出小数结果。
开发建议
编译代码时建议开启警告参数(例如GCC使用-Wall -Wextra参数),编译器会直接提示变量重复定义、变量未初始化这类基础错误,能大幅提升你排查问题的效率。
内容的提问来源于stack exchange,提问作者thehumbling
相关产品推荐
相关产品推荐

