吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2224|回复: 25
收起左侧

[C&C++ 原创] 最简易计算器

[复制链接]
18649448973 发表于 2023-3-25 17:36
本帖最后由 18649448973 于 2023-3-29 23:25 编辑

感谢@iawyxkdn8 的建议
[C] 纯文本查看 复制代码
//
#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');//判断是否为回车,回车继续
}

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
T0T202303131200 + 1 + 1 优秀,34行,有bug吗!
zhaoqingdz + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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[100];
    regex_t regex;
    regmatch_t match[2];
    double num1, num2, result;

    // 编译正则表达式
    int ret = regcomp(&regex, "^\\s*([0-9]+(\\.[0-9]+)?)\\s*([-+*/])\\s*([0-9]+(\\.[0-9]+)?)\\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[match[3].rm_so];
    sscanf(input + match[1].rm_so, "%lf", &num1);
    sscanf(input + match[4].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
怎么没有链接,是把程序代码给我,让我自己弄吗。我可是比小白还白
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
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-8 02:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表