我为学习开关用例测试用C写的这段代码有什么问题吗[closed]

roejwanj  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(150)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

3天前关闭。
Improve this question
我正在用C语言学习编程。我写了一个switch语句来求矩形、正方形和三角形的面积。你能告诉我哪里出错了吗?

#include <stdio.h>

int AreaOfSquare(int a)
float AreaOfrectangle(float b, float h)
float AreaOftriangle(float a, float b)
int NoneOfthose()

main(void)
{
    int a;
    scanf("%d", &a);
    
    switch(a)
    {
        case 1:
            AreaOfSquare(5);
            break;
        case 2:
            AreaOfrectangle(6, 5);
            break;
        case 3:
            AreaOftriangle(7, 8);
            break;
        default:
            NoneOfthose();
            printf("Please enter a Valid choice");
    }
    
    return 0;
}

int AreaOfSquare(int a)
{
    int area_s;
    area_s = a * a;
    printf("Area of Square is = %d\n", area_s);
}

float AreaOfrectangle(float b, float h)
{
    float area_r;
    area_r = (b * h) / 2;
    printf("Area of Square is = %f\n", area_r);  
}

float AreaOftriangle(float a, float b)
{
    float area_t;
    area_t = a * b;
    printf("Area of triangle is = %f\n" area_t);
}

int NoneOfthose(void)
{
    printf(" There is nothing to calculate");
}

我对用于计算面积的每个函数声明的数据类型做了一些更正。

mwecs4sa

mwecs4sa1#

1.有一些语法错误。函数声明后缺少;,area_t前缺少,。这表明您从未编译过与我们共享的代码(在请求帮助之前,最起码要编译)。通过将main()移到文件底部消除了原型。

  1. main()应该返回一个int
    1.在AreaOfrectangle()中,你的消息是Square。像这样复制代码,顺便说一句,是一个重构代码的提示。面积函数之间的唯一区别是参数的数量,用于计算面积的公式是形状的名称。例如:
void PrintResult(const char *shape, float area) {
    printf("Area of %s is = %f\n", shape, area);
}

// changed return type and argument to float for consistency
// with the other Area functions, but also to avoid having
// to write a PrintResult() for both int and float.
float AreaOfSquare(float a) {
    return a * a;
}

// ...
    float area;
    char *name;
    switch(a) {
        case 1:
            area = AreaOfSquare(5);
            shape = "Square";
            break;
// ...
        default:
            NoneOfthose();
            return 1;
    }
    PrintResult(shape, area);

1.检查scanf()返回值,否则您可能正在对未初始化的数据进行操作。
1.所有的区域函数都声明为返回一些东西,但实际上并没有,所以将返回类型改为void(但请参见上面的第3点)。
1.(未修复)考虑引入enum来为菜单选项分配常量,即:

enum {
  SQUARE = 1,
  RECTANGLE,
  TRIANGLE
};

然后你可以在case语句中使用那些常量,这样可读性会更强。
1.(未修复)打印浮点数时,请考虑使用%g而不是%f。它将删除尾随零。
1.(未修复)请考虑使用double而不是float
1.(未修复)提示“请输入有效的选择”意味着您希望循环运行此操作,直到做出有效的选择。

#include <stdio.h>

void AreaOfSquare(int a) {
    int area_s;
    area_s = a * a;
    printf("Area of square is = %d\n", area_s);
}

void AreaOfrectangle(float b, float h) {
    float area_r;
    area_r = (b * h) / 2;
    printf("Area of rectangle is = %f\n", area_r);
}

void AreaOftriangle(float a, float b) {
    float area_t;
    area_t = a * b;
    printf("Area of triangle is = %f\n", area_t);
}

void NoneOfthose(void) {
    printf(" There is nothing to calculate");
}

int main(void) {
    int a;
    if(scanf("%d", &a) != 1)
        return 1;
    switch(a) {
        case 1:
            AreaOfSquare(5);
            break;
        case 2:
            AreaOfrectangle(6, 5);
            break;
        case 3:
            AreaOftriangle(7, 8);
            break;
        default:
            NoneOfthose();
            printf("Please enter a Valid choice");
    }
}

相关问题