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

C语言圆形面积周长计算代码运行异常:输入后出现命令未识别报错

圆形面积/周长计算C代码错误排查与修复

问题根源分析

你的代码存在三个致命问题,直接导致了运行异常:

  1. 输入缓冲区溢出+类型不匹配:用单个char类型的choice存储用户输入的字符串(比如"luas"),但scanf("%s", &choice)会把整个字符串塞进仅1字节的char变量里,造成缓冲区溢出,破坏程序内存结构,甚至触发系统层面的命令报错。
  2. 错误使用赋值运算符:if(choice = luas)里的=是赋值操作,不是比较用的==,而且拿字符变量和浮点型变量(luas是float)做比较,逻辑完全混乱。
  3. 字符串比较方式错误:要判断用户输入的是"luas"还是"keliling",得用字符串比较函数strcmp,不能直接拿变量做对比。

修复后的完整代码

#include <stdio.h>
#include <math.h>
#include <string.h>  // 引入strcmp所需的头文件

int main(){
    float radius;
    float keliling;
    float luas;
    const float PI = 3.14;
    char choice[10];  // 改为字符数组存储输入的字符串
    luas = 0;
    keliling = 0;
    
    printf("Luas or Keliling : ");
    scanf("%9s", choice);  // %9s限制输入长度,避免溢出

    if(strcmp(choice, "luas") == 0){  // 用strcmp比较字符串
        printf("Enter radius : ");
        scanf("%f", &radius);
        luas = PI * pow(radius, 2);
        printf("Luas lingkaran adalah : %.2f\n", luas);
        
    }
    else if(strcmp(choice, "keliling") == 0){
        printf("Enter radius : ");
        scanf("%f", &radius);
        keliling = 2 * PI * radius;
        printf("Keliling lingkaran adalah : %.2f\n", keliling);
    }
    else{
        printf("输入选项无效,请输入Luas或Keliling\n");  // 增加错误提示
    }

    return 0;
}

修复说明

  • 把char choice改成char choice[10],用字符数组存储用户输入的字符串,避免溢出。
  • scanf("%9s", choice)限制输入最多9个字符(留1个位置存字符串结束符\0),进一步防止缓冲区溢出。
  • 用strcmp(choice, "luas") == 0来判断用户输入的字符串是否匹配,这是C语言中字符串比较的标准方式。
  • 移除了冗余计算:计算面积时不需要算周长,反之亦然,优化了代码逻辑。
  • 增加了无效输入的提示分支,提升用户体验。

内容的提问来源于stack exchange,提问作者tennov pakpahan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:36:59