C语言switch case语句失效:输入1时无法执行对应分支求助
C语言面积计算程序switch分支失效问题排查
问题描述
编写的C语言面积计算程序中,switch case语句无法正常工作,输入选择1时无法执行case 1对应的正方形面积计算分支,请求排查问题。
原代码
#include <stdio.h> #include <math.h> int main () { int choice; float area; printf("1 for area of Square\n"); printf(" 2 for area of Circle\n"); printf(" 3 for finding area of rectangle\n"); switch(choice) { case 1: { float side,area; printf("Enter Sides of Square"); scanf("%f",&side); area=(float)side*side; printf("Area of Square is %f",area); break; } case 2: { float radius,area; printf("Enter Radius of Circle"); scanf("%f",&radius); area=(float)3.14159*radius*radius; printf("Area of Circle %f",area); break; } case 3: { float len,breadth,area; printf("Enter Length and Breadth of Rectangle"); scanf("%f %f",&len,&breadth); area=(float)len*breadth; printf("Area of Rectangle is %f",area); break; } default: { printf("Invalid Choice"); break; } } return 0; }
问题根源
核心问题是变量choice未被赋值就传入switch语句。程序仅打印了选择提示,但没有通过scanf读取用户输入的选择值,导致choice是一个随机的垃圾值,无法匹配case 1(或其他合法分支),直接进入default分支。
修复方案
在switch语句之前添加读取用户选择的代码:
// 在所有printf提示之后,switch之前插入 printf("Enter your choice: "); scanf("%d", &choice);
额外优化细节:
- 每个printf后添加换行符
\n,让输出排版更整洁,例如printf("Enter Sides of Square\n"); - 全局声明的
float area;未被使用,可删除以避免冗余 (float)side*side这类强制转换无意义,因为side本身是float类型,计算结果默认就是float
修复后的完整代码
#include <stdio.h> #include <math.h> int main () { int choice; printf("1 for area of Square\n"); printf("2 for area of Circle\n"); printf("3 for finding area of rectangle\n"); printf("Enter your choice: "); scanf("%d", &choice); switch(choice) { case 1: { float side, area; printf("Enter Sides of Square\n"); scanf("%f", &side); area = side * side; printf("Area of Square is %f\n", area); break; } case 2: { float radius, area; printf("Enter Radius of Circle\n"); scanf("%f", &radius); area = 3.14159 * radius * radius; printf("Area of Circle %f\n", area); break; } case 3: { float len, breadth, area; printf("Enter Length and Breadth of Rectangle\n"); scanf("%f %f", &len, &breadth); area = len * breadth; printf("Area of Rectangle is %f\n", area); break; } default: { printf("Invalid Choice\n"); break; } } return 0; }
内容的提问来源于stack exchange,提问作者Waswasane
相关产品推荐
相关产品推荐

