C语言实现计算器

C语言实现的四则运算计算器

计算器支持 四则运算、圆括号;整数、小数、正负号;省略括号间'*'、括号内只有数字

#include<stdio.h>
#include<stdlib.h>

//栈定义
struct Num              //数字栈
{
    float num[100];       //栈
    int top;            //栈顶(元素个数)
};
struct Cal              //符号栈
{
    char cal[100];
    int top;
};

//入栈
void InNum(struct Num *n, float num)
{
    n->top++;
    n->num[n->top] = num;
}
void InCal(struct Cal *c, char cha)
{
    c->top++;
    c->cal[c->top] = cha;
}
//出栈
float OutNum(struct Num *n)
{
    float num = n->num[n->top];
    n->top--;
    return num;
}
char OutCal(struct Cal *c)
{
    char cha = c->cal[c->top];
    c->top--;
    return cha;
}

//读栈顶
float GetNum(struct Num *n)
{
    return n->num[n->top];
}
char GetCal(struct Cal *c)
{
    return c->cal[c->top];
}

//初始化双栈
void InitStacks(struct Num *n, struct Cal *c)
{
    n->top = -1;
    c->top = -1;
}

//输出错误信息 *剩下的错误情况在errofunc()中
int erro(int e)
{
    switch (e)
    {
    case 1:
        printf("***ILLEGAL CHARACTORS***\n");
        break;
    case 2:
        printf("***DO NOT ENTER CONSEQUTIVE CALCULATION SYMBOLS***\n");
        break;
    case 3:
        printf("***DO NOT TREAT ZERO AS A DIVISOR!***\n");
        break;
    case 4:
        printf("***PLEASE INPUT SOMETIONG***\n");
        break;
    case 5:
        printf("***BRACKETS DO NOT MATCH EACHOTHERS***\n");
        break;
     case 6:
        printf("***INVALID INPUT***\n");
        break;
    default:
        break;
    }
    fflush(stdin);
    return 1;
}

//获取输入的表达式并进行合法性检查
int GetString(char *str)
{
    char c;
    int i = 0;
    int e = 0;
    int b[2] = {0};
    printf("PLEASE ENTER THE ARITHMETIC EXPRESSION WITH \nintengers, floats AND '+' '-' '*' '/' '(' ')' \n");
    while((c = getchar()) != '\n')
	{
        str[i] = c;
        if(!((c  >= '0' && c <= '9') || c == '.' || c == '+' || c == '-' || c == '*' || c ==
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值