C语言用户选择检测及图形计算程序开发求助
C语言图形计算程序问题解答
问题需求
- 让用户选择圆形(circle)、三角形(triangle)或矩形(rectangle)
- 根据选择分别计算:
- 圆形:周长、面积
- 矩形:面积、周长
- 三角形:面积
现有代码的核心错误
你当前的代码存在几个关键问题,导致逻辑无法正常运行:
- 条件判断完全错误:
&testChoice是变量的内存地址,不是用户输入的数值,应该直接用testChoice获取输入值testChoice是整数类型,不能和字符串"1"比较,要和整数1进行比较(C语言中双引号包裹的是字符串常量,单引号是字符常量,这里用整数比较才对)
- 分支逻辑不严谨:多个独立的
if语句会导致如果输入异常时可能触发多个分支,应该用else if或者switch实现互斥分支 - 缺少核心计算逻辑:代码仅做了选择判断,没有实现后续的参数输入和计算功能
修正后的完整代码
以下是实现全部需求的代码,包含输入验证和计算逻辑:
#include <stdio.h> #include <math.h> // 用于海伦公式的sqrt函数 int main(void) { int choice; const int CIRCLE = 1; const int TRIANGLE = 2; const int RECTANGLE = 3; // 提示用户选择图形 printf("请选择图形类型:\n"); printf("1 - 圆形\n2 - 三角形\n3 - 矩形\n"); // 验证输入是否有效 if (scanf("%d", &choice) != 1) { printf("输入无效,请输入整数!\n"); return 1; } // 根据选择处理不同图形 switch(choice) { case CIRCLE: { double radius; printf("请输入圆形半径:"); scanf("%lf", &radius); double perimeter = 2 * M_PI * radius; double area = M_PI * radius * radius; printf("圆形周长:%.2lf,面积:%.2lf\n", perimeter, area); break; } case TRIANGLE: { double a, b, c; printf("请输入三角形的三条边长(用空格分隔):"); scanf("%lf %lf %lf", &a, &b, &c); // 先验证三边是否能构成三角形 if (a + b > c && a + c > b && b + c > a) { double s = (a + b + c) / 2; double area = sqrt(s * (s - a) * (s - b) * (s - c)); printf("三角形面积:%.2lf\n", area); } else { printf("输入的三边无法构成三角形!\n"); } break; } case RECTANGLE: { double width, height; printf("请输入矩形的长和宽(用空格分隔):"); scanf("%lf %lf", &width, &height); double area = width * height; double perimeter = 2 * (width + height); printf("矩形面积:%.2lf,周长:%.2lf\n", area, perimeter); break; } default: printf("无效选择,请输入1-3之间的整数!\n"); break; } return 0; }
关键知识点说明
- scanf的正确使用:
scanf("%d", &choice)中&是取地址符,用于让scanf把输入值存入变量的内存地址,整数用%d,浮点数用%lf(double类型) - 条件分支:使用
switch处理多分支选择比else if更清晰,适合这种整数枚举的场景 - 数学计算:圆形计算用到
M_PI(定义在math.h中,部分编译器需要添加编译参数-lm才能正常链接),三角形用海伦公式计算面积,同时增加了输入合法性验证
内容的提问来源于stack exchange,提问作者Leah Trahan
相关产品推荐
相关产品推荐

