最简易计算器
本帖最后由 18649448973 于 2023-3-29 23:25 编辑感谢@iawyxkdn8 的建议
//
#include <stdio.h>
void test5();
int main()
{
test5();
return 0;
}
//0. 写一个最简单的计算器,支持四则运算
void test5() {
char count,sign=0;
float a, b, c;
do {
do{
sign=0;
printf("请输入一组公式:");
scanf(" %f %c %f", &a, &count, &b);
// /输入%f%c%f之间有空格,输入的时候可以忽略空格
//输入浮点数和运算法则
getchar();
//消除缓存内的回车键
if(count=='/'&&(a==0||b==0))
printf("除数不能为%d\n",sign++);//输入错误标志=1
//选择运计算方式
switch (count) {
case '+':c = a + b;
break;
case '-': c = a - b;
break;
case '*': c = a * b;
break;
case '/': c = a / b;
break;
default :sign=1;//输入运算符错误,标志1
printf("输入错误算法,请重新输入\n");
break;
}
}
while(sign);//判断标志是否为1(真)为1返回重新输入公式
printf("\n公式%.2f%c%.2f=%.2f", a, count, b, c);
printf("\n回车继续,任意键退出:");
}
while (getchar() == '\n');//判断是否为回车,回车继续
} 这段代码实现了一个简单的四则运算计算器。用户输入两个浮点数和一个运算符,程序通过switch语句选择对应的运算方式,并输出结果。该计算器可以一直运行,直到用户按下任意键退出。
需要注意的是,由于输入中包含空格,所以需要在scanf语句中使用%c占位符来读取运算符。另外,在读取完浮点数和运算符后,还需要使用getchar()函数来读取缓冲区中的回车键,以免对下一次输入造成影响。
该代码实现了基本的四则运算,但是并未考虑到输入错误的情况,比如用户输入的运算符不是加减乘除之一,或者除数为0等情况。在实际使用时需要考虑这些情况并进行处理。 #include <stdio.h>
#include <regex.h>
int main() {
char input;
regex_t regex;
regmatch_t match;
double num1, num2, result;
// 编译正则表达式
int ret = regcomp(®ex, "^\\s*(+(\\.+)?)\\s*([-+*/])\\s*(+(\\.+)?)\\s*$", REG_EXTENDED);
if (ret != 0) {
printf("正则表达式编译失败");
return 1;
}
// 获取用户输入并匹配
printf("请输入运算式: ");
fgets(input, sizeof(input), stdin);
ret = regexec(®ex, input, 3, match, 0);
if (ret != 0) {
printf("无效的输入格式");
return 1;
}
// 提取数字和运算符
char op = input.rm_so];
sscanf(input + match.rm_so, "%lf", &num1);
sscanf(input + match.rm_so, "%lf", &num2);
// 计算结果
switch(op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 == 0.0) {
printf("除数不能为零");
return 1;
}
result = num1 / num2;
break;
default:
printf("无效的运算符");
return 1;
}
printf("%.2lf %c %.2lf = %.2lf", num1, op, num2, result);
// 释放正则表达式
regfree(®ex);
return 0;
} 非常基础,可以试试利用正则表达式来进行匹配,然后通过栈来进行混合运算 感谢楼主的分享!收藏了! 感谢楼主的分享!收藏了! 怎么没有链接,是把程序代码给我,让我自己弄吗。我可是比小白还白{:1_907:} 简约而不简单 学习笔记啊,给楼主点个赞。 没有下载链接? 这个用起来方便,谢谢 感谢楼主分享