根据输入的一个字符串(只会是加减乘除计算式),输出该计算式对应的结果,要求使用scanf函数
时间: 2025-01-01 20:38:31 浏览: 6
为了根据输入的字符串(包含加减乘除运算符)计算出表达式的值,你可以编写一个C语言程序,使用栈来解析这个字符串,并通过scanf
函数获取用户输入。这里有一个基本的示例,假设字符串只包含合法的整数和运算符:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_TOKENS 50
// 帮助函数,检查字符是否是数字或运算符
int is_number(char c) {
return (isdigit(c) || c == '+' || c == '-' || c == '*' || c == '/');
}
// 帮助函数,从字符串中取出一个有效的数字
double get_number(const char* str, int start_index) {
double number = 0;
while (is_number(*str)) {
number = number * 10 + (*str - '0');
str++;
}
return atof(str); // 转换回浮点数
}
// 主函数
int main() {
char input[MAX_TOKENS];
double result = 0;
int tokens_count = 0;
printf("请输入一个计算式(例如:2 + 3 * 4): ");
fgets(input, sizeof(input), stdin);
// 移除末尾的换行符
input[strcspn(input, "\n")] = '\0';
// 分割字符串成tokens
char* token = strtok(input, " ");
while (token != NULL && tokens_count < MAX_TOKENS) {
double num = get_number(token, 0);
if (tokens_count > 0) {
switch (*strtok(NULL, "+-*/")) { // 检查下一个token是什么运算符
case '+':
result += num;
break;
case '-':
result -= num;
break;
case '*':
result *= num;
break;
case '/':
if (result != 0) {
result /= num;
} else {
printf("除数不能为零。\n");
break;
}
}
}
tokens_count++;
token = strtok(NULL, " ");
}
printf("计算结果是: %.2f\n", result);
return 0;
}