226 words
1 minute
逆波兰计算器
2025-09-23

简化版,能跑就行😄

//
// Created by Rock Zhang on 2025/9/23.
//
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 100
typedef struct
{
int data[MAX];
int top;
}Stack;
void initStack(Stack* stack)
{
stack -> top = -1;
}
void push(Stack* stack, int data)
{
stack -> data[++stack -> top] = data;
}
int pop(Stack* stack)
{
return stack -> data[stack -> top--];
}
int calc()
{
Stack stack;
initStack(&stack);
char token[MAX];
while (1)
{
scanf("%s", token);
if (strcmp(token, "=") == 0)
{
break;
}
int is_number = 1;
for (int i = 0; token[i] != '\0'; i++) {
if (!isdigit(token[i])) {
is_number = 0;
break;
}
}
if (is_number) {
int number = atoi(token);
push(&stack, number);
printf("-> 输入数字: %d\n", number);
}
else if (strlen(token) == 1)
{
char operator = token[0];
int a = 0, b = 0, result = 0;
b = pop(&stack);
a = pop(&stack);
switch (operator)
{
case '+':
printf("输入算符 +\n");
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
default:
printf("错误: 未知运算符 '%c'。\n", operator);
}
push(&stack, result);
}
}
printf("%d", pop(&stack));
return 0;
}
int main()
{
calc();
return 0;
}
逆波兰计算器
https://blog.282994.xyz/posts/逆波兰计算器/
Author
Rock
Published at
2025-09-23
License
CC BY-NC-SA 4.0