SimpleCalculator缺陷分析与二次开发

C语言计算器项目:
项目名称:Simple Calculator
GitHub 地址: https://github.com/example/simple-calculator
项目简介
这是一个命令行计算器,支持加、减、乘、除运算。
代码结构简单,适合初学者阅读和修改。
主要功能
·支持加、减、乘、除运算。
·通过命令行交互输入运算符和数字。
代码分析
以下是calculator.c的核心代码:

// 加法
double add(double a, double b) {
return a + b;
}

// 减法
double subtract(double a, double b) {
return a - b;
}

// 乘法
double multiply(double a, double b) {
return a * b;
}

// 除法
double divide(double a, double b) {
if (b == 0) {
printf("错误:除数不能为零!\n");
return 0;
}
return a / b;
}

int main() {
char operator;
double num1, num2, result;

printf("欢迎使用简单计算器!\n");

while (1) {
    printf("请输入运算符 (+, -, *, /) 或输入 'q' 退出: ");
    scanf(" %c", &operator);

    // 检查是否退出
    if (operator == 'q') {
        printf("感谢使用,再见!\n");
        break;
    }

    // 检查运算符是否有效
    if (operator != '+' && operator != '-' && operator != '*' && operator != '/') {
        printf("无效的运算符,请重新输入\n");
        continue;
    }

    printf("请输入第一个数字: ");
    scanf("%lf", &num1);

    printf("请输入第二个数字: ");
    scanf("%lf", &num2);

    // 执行运算
    switch (operator) {
        case '+':
            result = add(num1, num2);
            break;
        case '-':
            result = subtract(num1, num2);
            break;
        case '*':
            result = multiply(num1, num2);
            break;
        case '/':
            result = divide(num1, num2);
            break;
    }

    printf("结果: %.2lf\n", result);
}

return 0;

}
发现缺陷
在阅读代码时,我发现
1:不支持连续运算
当前程序每次只能执行一次运算,无法支持连续运算(如1+2*3)。
2:未处理输人错误如果用户输人非数字字符,程序会崩。
3:功能单1仅支持基本运算,缺乏幂运算、取模运算!
二次开发:修改代码支持连续运算,增加输入验证防止程序崩溃,以下是增添的部分:
void clear_input_buffer() {
while (getchar() != '\n'); // 清除输入缓冲区
}
// 幂运算
double power(double a, double b) {
return pow(a, b);
}

// 取模运算
int modulo(int a, int b) {
if (b == 0) {
printf("错误:除数不能为零!\n");
return 0;
}
return a % b;
}
int main()
while (1) {
printf("请输入运算符 (+, -, , /) 或输入 'q' 退出: ");
if (scanf(" %c", &operator) != 1) {
clear_input_buffer();
printf("无效的输入,请重新输入\n");
continue;
}
if (operator == 'q') {
printf("感谢使用,再见!\n");
break;
}
if (operator != '+' && operator != '-' && operator != '
' && operator != '/') {
printf("无效的运算符,请重新输入\n");
continue;
}
printf("请输入数字: ");
if (scanf("%lf", &num1) != 1) {
clear_input_buffer();
printf("无效的数字,请重新输入\n");
continue;
}

总结
通过分析这个 C 语吉计算器项目,我学到了:
1.如何阅读和理解开源代码,
2.如何发现和修复代码中的缺陷。
3.如何通过二次开发改进项目功能。

posted @ 2025-02-28 15:25  2352836  阅读(75)  评论(0)    收藏  举报