18649448973 发表于 2023-3-25 17:36

最简易计算器

本帖最后由 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');//判断是否为回车,回车继续
}

iawyxkdn8 发表于 2023-3-26 08:58

这段代码实现了一个简单的四则运算计算器。用户输入两个浮点数和一个运算符,程序通过switch语句选择对应的运算方式,并输出结果。该计算器可以一直运行,直到用户按下任意键退出。

需要注意的是,由于输入中包含空格,所以需要在scanf语句中使用%c占位符来读取运算符。另外,在读取完浮点数和运算符后,还需要使用getchar()函数来读取缓冲区中的回车键,以免对下一次输入造成影响。

该代码实现了基本的四则运算,但是并未考虑到输入错误的情况,比如用户输入的运算符不是加减乘除之一,或者除数为0等情况。在实际使用时需要考虑这些情况并进行处理。

ZhangHunTun 发表于 2023-3-30 18:30

#include <stdio.h>
#include <regex.h>

int main() {
    char input;
    regex_t regex;
    regmatch_t match;
    double num1, num2, result;

    // 编译正则表达式
    int ret = regcomp(&regex, "^\\s*(+(\\.+)?)\\s*([-+*/])\\s*(+(\\.+)?)\\s*$", REG_EXTENDED);
    if (ret != 0) {
      printf("正则表达式编译失败");
      return 1;
    }

    // 获取用户输入并匹配
    printf("请输入运算式: ");
    fgets(input, sizeof(input), stdin);
    ret = regexec(&regex, 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(&regex);
    return 0;
}

rsdfcvghfgiy 发表于 2023-3-25 20:12

非常基础,可以试试利用正则表达式来进行匹配,然后通过栈来进行混合运算

zhaoqingdz 发表于 2023-3-25 20:27

感谢楼主的分享!收藏了!

zhiaipojie0313 发表于 2023-3-25 20:31

感谢楼主的分享!收藏了!

pawaluoji 发表于 2023-3-25 20:45

怎么没有链接,是把程序代码给我,让我自己弄吗。我可是比小白还白{:1_907:}

zhengxinjun 发表于 2023-3-26 00:12

简约而不简单

Wapj_Wolf 发表于 2023-3-26 07:47

学习笔记啊,给楼主点个赞。

chayunyuxiang 发表于 2023-3-26 08:31

没有下载链接?

wobzhidao 发表于 2023-3-26 08:56

这个用起来方便,谢谢

bluemei 发表于 2023-3-26 08:57

感谢楼主分享
页: [1] 2 3
查看完整版本: 最简易计算器