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.如何通过二次开发改进项目功能。