You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:30:44