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

C语言图形面积计算程序运行异常,请求代码故障排查及修复

图形面积计算工具程序异常排查与修复方案

问题描述

开发的C语言图形面积计算工具,接收用户输入图形类型(圆形、正方形、矩形)后,无法正常执行后续的尺寸输入与面积计算流程,代码如下:

#include<stdio.h>
#include<math.h>

float square(float side);
float circle(float rad);
float rect(float a,float b);

int main(){

    char lol;
    
    printf("press s for square\n c for circle\n r for rectagle\n");
    scanf("%c ", &lol);

    if(lol == 's')
    {
        int t;
        printf("enter side measurement");
        scanf("%d", &t);
        printf("the area is %f", square(t));

        
    }
    if(lol == 'c');
    {
        int r;
        printf("enter radius of circle");
        scanf("%d", &r);
        printf("the area is %f", circle(r));


    }
    if (lol == 'r')
    {
        int m,n;
        printf("enter 2 sides ");
        scanf("%d %d", &m,&n);
        printf("the area is %f", rect(m,n));
    }

    return 0;
}

float square(float side){
    return side*side;
}

float circle(float rad){
    return 3.14* rad*rad;
}

float rect(float a,float b){
    return a*b;
}

问题排查

  • scanf格式符后的多余空格阻塞输入
    代码中scanf("%c ", &lol);的%c后多了一个空格,scanf会持续忽略空白字符,直到读取到非空白字符才结束,导致用户输入图形类型后,必须再输入一个非空白字符才能推进流程,造成假死现象。
  • if语句后的冗余分号破坏逻辑
    if(lol == 'c');末尾的分号让if成为空语句,后续代码块会无条件执行,不管用户选的是什么图形,都会触发圆形的输入计算逻辑,干扰正常分支流程。
  • int类型尺寸参数的精度缺陷
    尺寸参数用int定义,但计算函数接收float类型,若用户输入小数会被截断,导致计算结果不准确,同时限制了输入范围。

修复方案

针对上述问题,修复后的代码如下:

#include<stdio.h>
#include<math.h>

float square(float side);
float circle(float rad);
float rect(float a, float b);

int main(){
    char lol;
    
    printf("请输入图形类型:s(正方形)、c(圆形)、r(矩形)\n");
    // 移除%c后的空格,避免输入阻塞
    scanf("%c", &lol);

    if(lol == 's')
    {
        // 改用float类型存储尺寸,支持小数输入
        float t;
        printf("请输入正方形的边长:");
        scanf("%f", &t);
        printf("正方形的面积为:%f\n", square(t));
    }
    // 移除if语句后的分号,恢复分支逻辑
    if(lol == 'c')
    {
        float r;
        printf("请输入圆形的半径:");
        scanf("%f", &r);
        printf("圆形的面积为:%f\n", circle(r));
    }
    if (lol == 'r')
    {
        float m, n;
        printf("请输入矩形的两个边长:");
        scanf("%f %f", &m, &n);
        printf("矩形的面积为:%f\n", rect(m, n));
    }

    return 0;
}

float square(float side){
    return side * side;
}

float circle(float rad){
    // 使用M_PI(需包含math.h)替代硬编码的3.14,提升精度
    return M_PI * rad * rad;
}

float rect(float a, float b){
    return a * b;
}

额外优化点:

  • 将提示信息改为中文,提升易用性
  • 使用math.h中的M_PI常量替代硬编码的3.14,计算精度更高
  • 输出添加换行符,让结果显示更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:50:24