实现一个简易的计算器,输入为不定长度的包含整形数字和运算符的算式,算式中只包含加减操作,当输入等号时表示输入完成,输出结果 C语言
时间: 2024-11-20 08:42:58 浏览: 24
实现一个简单的计算器,可以使用递归解析算法。下面是一个基本的C语言函数示例,它会处理这样的算式:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int num;
char op; // '+' 或 '-'
} Token;
// 解析算式的辅助函数
int parse(Token* tokens, int start, int end) {
if (end - start == 0)
return 0; // 空串
int result = tokens[start].num;
int i = start + 1;
while (i < end && tokens[i].op != '+') { // 遇到第一个 '+' 后停止
if (tokens[i].op == '-') {
result -= parse(tokens, i + 1, end); // 减去后续的结果
}
i++;
}
return result;
}
// 主函数
int main() {
char input[100];
fgets(input, sizeof(input), stdin);
// 分割输入字符串为token数组
Token tokens[50];
int token_count = 0;
for (int i = 0; input[i]; i++) {
if (input[i] == ' ' || input[i] == '\n') continue;
else if (isdigit(input[i])) {
int num = 0;
while (i < strlen(input) && isdigit(input[i])) {
num = num * 10 + input[i] - '0';
i++;
}
tokens[token_count].num = num;
i--; // 跳过最后的非空格字符
token_count++;
} else if (input[i] == '+' || input[i] == '-') {
tokens[token_count++].op = input[i];
}
}
// 结束标记
tokens[token_count].op = '\0';
printf("Result: %d\n", parse(tokens, 0, token_count));
return 0;
}
```
这个程序首先读取用户输入的算式,然后通过循环分割并存储为Token结构体数组。接下来,`parse`函数从左向右扫描,遇到'+'则计算之前的数值,并将结果累加到当前值上,遇到'-'则执行减法操作。
注意,这个实现假设输入格式总是正确的,没有错误的输入检查。在实际应用中,可能需要添加更多的错误处理和边界条件检查。
阅读全文