SimpleCalculator缺陷分析与二次开发

news/2025/2/28 15:28:10/文章来源:https://www.cnblogs.com/11122333q/p/18743361

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/891188.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Arria 10 FPGA 的 DP 接口开发板电路研制

1.引言物联网,智能汽车,云计算在我们生活中已经耳熟能详,随着FPGA的更新进步,在各类电子科技中不断发力,让我们的生活变得更加智能和便捷。下面给大家介绍一下来自Intel的FPGA Arria 10以及明德扬研发的一款Arria 10的开发板电路设计。 2.Arria 10 FPGAIntel Arria10 FPGA…

西数硬盘二次开盘数据恢复之国外损坏带回在北京恢复失败盘片划伤

这是一块西部数据2T的移动硬盘,北京客户寄过来的,用户在国外工作的时候就损坏不识别了,但当地修复不了,回国后就在北京找了一家数据恢复公司进行处理,但由于盘片有划伤,没能恢复出数据,后来客户找到我们,想再尝试一下,因为里面有海外工作时几百G的工程项目资料,比较重…

mysql多表

一、表格 员工表 sid:员工编号、name:姓名、age:年龄、woektime_start 入职时间,incoming工资 dept2 部门编号部门表 dept1 部门编号,dept_name 部门名称二、建表语句 CREATE table dept( dept1 VARCHAR(6), dept_name VARCHAR(20)) default charset=utf8; INSERT into d…

重磅 | Cloud Ace 推出 GenAIOps 服务:加速企业生成式 AI 商业落地

Cloud Ace 宣布推出 GenAIOps 服务,主要业务是面向国内外企业:提供与生成式 AI 运维支持相关的专业服务及运维服务 转售符合客户需求的高度创新产品及咨询服务该服务旨在以尖端技术赋能企业,为客户提供最优的 AI 解决方案,最大化生成式 AI 的商业价值与成果。联系我们—Clo…

SAP 中类的使用

一、事务代码:SE24 二、步骤 2.1、创建类:se24实例化类型public:该类可以在任何地方进行初始化Protected:只能在自身和或类的子类中进行初始化Private: 只能自身的类中进行初始化Abstract: 不可以创建实例。 2.2、创建属性 2.2.1、选择属性 在属性分页签中先按上图填写好属性…

字符串数组指针变量的地址关系

deque是一个指向字符串数组的指针变量(char **deque)。下面我用图示来介绍下,字符串数组的相关概念。 首先定义一个字符串数组指针 char **deque;然后再申请N个数组空间 deque = (char **)malloc(N * sizeof(char *));此时deque就是一个拥有N个字符串指针的数组。然后向第一…

牛客题解 | 斐波那契数列_1

牛客题库题解题目 题目链接 描述 此题是非常经典的入门题了。我记得第一次遇到此题是在课堂上,老师拿来讲“递归”的(哈哈哈)。同样的类型的题还有兔子繁殖的问题。大同小异。此题将用三个方法来解决,从入门到会做。 考察知识:递归,记忆化搜索,动态规划和动态规划的空间…

牛客题解 | 整数中1出现的次数(从1到n整数中1出现的次数)

牛客题库题解题目 题目链接 题目的主要信息:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数举一反三: 学习完本题的思路你可以解决如下题目: JZ17. 打印从1到最大的n位数 JZ15. 二进制中1的个数 方法一:按位统计法(推荐使用) 思路: 数字都是由位数组成,某…

牛客题解 | 数组中重复的数字

牛客题库题解题目 题目链接 题目的主要信息:一个长度为\(n\)的数组中只有0到\(n-1\)的数字 需要找出其中任意一个重复出现的数字举一反三: 学习完本题的思路你可以解决如下题目: JZ56. 数组中只出现一次的两个数字 JZ50. 第一个只出现一次的字符 JZ75. 字符流中第一个不重复…

牛客题解 | 数据流中的中位数

牛客题库题解题目 题目链接 题目主要信息:寻找数据的中位数 数据量在不断输入增长举一反三: 学习完本题的思路你可以解决如下题目: BM46. 最小的k个数 方法一:插入排序法(推荐使用) 知识点:插入排序 插入排序是排序中的一种方式,一旦一个无序数组开始排序,它前面部分就…

牛客题解 | 数组中出现次数超过一半的数字

牛客题库题解题目 题目链接 题目主要信息:题目给出一个长度为n的数组,其中有一个数字出现次数超过了数组长度的一半,需要我们找出这个数字 输入数组非空,保证有解,这样就不用考虑特殊情况举一反三: 学习完本题的思路你可以解决如下题目: BM52. 数组中只出现一次的两个数字…

牛客题解 | 数值的整数次方

牛客题库题解题目 题目链接 题目的主要信息:求一个浮点数的整数次方 整数有正有负 不可以使用库函数,也不需要判断大数问题举一反三: 学习完本题的思路你可以解决如下题目: JZ83. 剪绳子(进阶版) 方法一:直接运算(推荐使用) 思路: 既然是求次方,那我们做不断累乘就可…