实现一个简易的计算器,输入为不定长度的包含整形数字和运算符的算式,算式中只包含加减操作,当输入等号时表示输入完成,输出结果。C语言
时间: 2024-11-06 13:20:18 浏览: 23
在C语言中,你可以使用栈数据结构来实现一个简单的计算器,这里给出一个简化的示例。首先,创建一个函数来处理单个操作数和运算符,然后在主循环中读取用户输入,直到遇到等号。
```c
#include <stdio.h>
#include <stdlib.h>
// 声明栈和操作函数
typedef struct {
int value;
} StackElement;
StackElement* createStack();
void push(StackElement** stack, int num);
int pop(StackElement** stack);
char calculate(char op, int a, int b);
int main() {
StackElement* stack = createStack();
char input[50];
int num1, num2, result;
while (true) {
printf("请输入一个算式(输入等号结束):");
fgets(input, sizeof(input), stdin); // 读取一行输入
input[strlen(input)-1] = '\0'; // 去除换行符
if (input[0] == '=') { // 如果等号结束,计算并退出循环
result = pop(&stack);
printf("结果是:%d\n", result);
break;
}
// 分割数字和运算符
char* token = strtok(input, "+-");
while (token != NULL) {
num1 = atoi(token); // 将字符串转为整数
token = strtok(NULL, "+-");
if (token == NULL) { // 如果只有最后一个元素,视为下一个数字
num2 = num1;
} else {
num2 = atoi(token);
char op = *strchr(token, '+'); // 获取运算符
result = calculate(op, num1, num2);
push(&stack, result);
}
}
}
freeStack(stack); // 清理内存
return 0;
}
// 栈相关功能
StackElement* createStack() {
StackElement* stack = (StackElement*)malloc(sizeof(StackElement));
stack->value = 0;
return stack;
}
void push(StackElement** stack, int num) {
(*stack)->value = num;
}
int pop(StackElement** stack) {
int result = (*stack)->value;
*stack = (*stack)->next; // 移动栈顶元素
free(*stack); // 释放内存
return result;
}
char calculate(char op, int a, int b) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
default:
printf("非法运算符!\n");
return -1; // 非法情况处理,返回错误值
}
}
// 自由堆栈函数(仅作示例)
void freeStack(StackElement* stack) {
StackElement* current = stack;
while (current != NULL) {
StackElement* temp = current;
current = current->next;
free(temp);
}
}
```
这个程序通过`calculate`函数实现了基本的加减运算,然后利用栈存储操作数。当你输入等号时,它会弹出栈顶元素并打印结果。注意,此代码并未处理所有的边界条件和错误输入,实际使用时需要添加相应的检查。
阅读全文