如何用c语言编计算器怎么用

如何用c语言编计算器怎么用

#include

#include

#include

#include

#define MAX 100

typedef struct {

int data[MAX];

int top;

} Stack;

void init(Stack *s) {

s->top = -1;

}

int isFull(Stack *s) {

return s->top == MAX - 1;

}

int isEmpty(Stack *s) {

return s->top == -1;

}

void push(Stack *s, int value) {

if (isFull(s)) {

printf("Stack overflown");

exit(1);

}

s->data[++(s->top)] = value;

}

int pop(Stack *s) {

if (isEmpty(s)) {

printf("Stack underflown");

exit(1);

}

return s->data[(s->top)--];

}

int add(int a, int b) {

return a + b;

}

int subtract(int a, int b) {

return a - b;

}

int multiply(int a, int b) {

return a * b;

}

int divide(int a, int b) {

if (b == 0) {

printf("Error: Division by zeron");

exit(1);

}

return a / b;

}

void parseInput(const char *input, Stack *values, Stack *operators) {

int i = 0;

while (input[i] != '') {

if (isdigit(input[i])) {

int num = 0;

while (isdigit(input[i])) {

num = num * 10 + (input[i] - '0');

i++;

}

push(values, num);

} else if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/') {

push(operators, input[i]);

i++;

} else {

i++;

}

}

}

void checkInput(const char *input) {

int i = 0;

while (input[i] != '') {

if (!isdigit(input[i]) && input[i] != '+' && input[i] != '-' && input[i] != '*' && input[i] != '/') {

printf("Error: Invalid character '%c'n", input[i]);

exit(1);

}

i++;

}

}

int calculate(Stack *values, Stack *operators) {

while (!isEmpty(operators)) {

int b = pop(values);

int a = pop(values);

char op = pop(operators);

int result;

switch (op) {

case '+':

result = add(a, b);

break;

case '-':

result = subtract(a, b);

break;

case '*':

result = multiply(a, b);

break;

case '/':

result = divide(a, b);

break;

default:

printf("Error: Invalid operator '%c'n", op);

exit(1);

}

push(values, result);

}

return pop(values);

}

int main() {

char input[MAX];

Stack values, operators;

init(&values);

init(&operators);

printf("Enter an expression: ");

fgets(input, MAX, stdin);

input[strcspn(input, "n")] = '';

checkInput(input);

parseInput(input, &values, &operators);

int result = calculate(&values, &operators);

printf("Result: %dn", result);

return 0;

}

相关推荐