C语言用scanf(%f)读取int变量计算矩形面积输出0问题
问题产生原因
- 核心问题是变量类型与格式化输入输出的格式说明符不匹配,触发了C语言的未定义行为:
- 你声明的
l、b都是int整型变量,但scanf中使用了仅适用于浮点型的%f格式符,输入的数值会按照浮点型的内存布局写入整型变量的内存空间,无法正确存储为你输入的整数值。 - 后续计算
l*b得到的结果仍是整型,printf中又用%f解析整型数值的内存空间,自然会输出错误的0.000000结果。
- 你声明的
修复方案
有两种常见修复方式,按需选择即可:
方案1:保持变量为整型,修改格式说明符
如果只需要计算整数输入的矩形面积,把scanf的%f改为%d、printf的%f改为%d即可:
#include <stdio.h> int main() { int l, b; printf("Enter the length of the rectangle: "); scanf("%d", &l); printf("Enter the breadth of the rectangle: "); scanf("%d", &b); printf("Area of rectangle is %d", l * b); return 0; }
方案2:修改变量类型为浮点型,适配现有格式说明符
如果需要支持小数边长的计算,把l、b的类型改为float即可:
#include <stdio.h> int main() { float l, b; printf("Enter the length of the rectangle: "); scanf("%f", &l); printf("Enter the breadth of the rectangle: "); scanf("%f", &b); printf("Area of rectangle is %f", l * b); return 0; }
内容的提问来源于stack exchange,提问作者adityanithariya
相关产品推荐
相关产品推荐

