C语言圆形面积周长计算代码运行异常:输入后出现命令未识别报错
圆形面积/周长计算C代码错误排查与修复
问题根源分析
你的代码存在三个致命问题,直接导致了运行异常:
- 输入缓冲区溢出+类型不匹配:用单个
char类型的choice存储用户输入的字符串(比如"luas"),但scanf("%s", &choice)会把整个字符串塞进仅1字节的char变量里,造成缓冲区溢出,破坏程序内存结构,甚至触发系统层面的命令报错。 - 错误使用赋值运算符:
if(choice = luas)里的=是赋值操作,不是比较用的==,而且拿字符变量和浮点型变量(luas是float)做比较,逻辑完全混乱。 - 字符串比较方式错误:要判断用户输入的是"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
相关产品推荐
相关产品推荐

