为何C语言程序中area与peri变量输出均为0.000000?
问题分析与解决
咱们先直接点出核心问题:你把变量计算的时机完全搞反了,还有个小笔误,这两个问题共同导致了输出异常。
1. 最关键的错误:计算逻辑的顺序颠倒
你看这段初始化代码:
double length, width, peri = (length*2) + (width*2), area = length*width;
这里你在定义peri和area的时候,就直接用length和width来计算初始值了,但这时候length和width还完全没被用户输入赋值!它们属于局部自动变量,默认没有初始化,内存里的初始值是不确定的(你这次输出0.000000只是巧合,换个运行环境可能会输出完全随机的垃圾值)。
正确的逻辑应该是:先通过scanf读取用户输入的length和width,拿到有效数值后,再用它们计算周长和面积,而不是反过来先计算再赋值。
2. 额外的小笔误
你的printf输出语句里写了circ,但你定义的周长变量明明是peri,这会导致编译错误(如果编译器没拦截,也会使用未定义的变量,结果同样不对)。
修正后的完整代码
把计算逻辑移到输入之后,补上必要的头文件,再修正变量名,代码就能正常运行了:
#include <stdio.h> int main() { double length, width, peri, area; printf("Enter the length of the rectangle in centimeters: "); scanf("%lf", &length); printf("\nEnter the width of the rectangle in centimeters: "); scanf("%lf", &width); // 现在length和width已有有效输入值,再进行计算 peri = (length * 2) + (width * 2); area = length * width; printf("The perimeter of the rectangle is %lf cm.\nThe area of the rectangle is %lf cm.", peri, area); return 0; }
补充小知识点
在C语言中,函数内部的局部变量(比如main里的这些变量)如果不手动初始化,它们的初始值是未定义行为——不是固定为0,只是你这次运行刚好碰到了内存中残留的0值而已。所以一定要养成习惯:使用变量之前,必须先给它赋值!
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

