帮我写一段c语言程序,要求输入若干个c语言表达式,能够判断表达式是否合法以及是哪个表达式类型
时间: 2024-10-18 14:18:22 浏览: 27
C语言学习-数据类型、运算符与表达式
在C语言中,直接编写一个程序来检查所有输入的表达式并确定其合法性是非常复杂的,因为这通常涉及到词法分析、语法解析等过程。不过,我可以为你提供一个简单的示例,这个程序使用了`fgets`函数从用户输入获取单行字符串,然后尝试计算它以检查基本的运算符优先级。请注意,这仅适用于整数表达式的简单判断,并不能处理更复杂的情况如变量、赋值操作或函数调用。
```c
#include <stdio.h>
#include <ctype.h>
int is_number(char c) {
return (isdigit(c) || (c == '-' && c ==.peek()));
}
double evaluate_expression(const char *expression) {
double result = 0.0;
int num = 0;
char op;
for(int i = 0; expression[i]; ++i) {
if(isdigit(expression[i])) {
num = num * 10 + (expression[i] - '0');
} else if(op != '*' && op != '/') { // 操作符不在当前范围内,结束运算
op = expression[i];
if(op == '+' || op == '-') {
result += num * (op == '+' ? 1 : -1);
num = 0;
}
}
}
// 如果最后一个字符是操作符,加上剩余的数字
if(num != 0)
result += num;
return result;
}
int main() {
char input[100];
while(scanf("%s", input) != EOF) {
input[strlen(input)-1] = '\0'; // 去除换行符
if(is_number(*input)) {
printf("这是一个数值表达式 (%f)\n", evaluate_expression(input));
} else {
// 简单地判断是否有非法字符,比如未闭合的括号或未知操作符
bool valid = true;
for(char c : input) {
if(!isalnum(c) && c != '(' && c != ')' && c != '+' && c != '-' && c != '*' && c != '/') {
valid = false;
break;
}
}
if(valid) {
printf("这是一个算术表达式\n");
} else {
printf("表达式无效\n");
}
}
}
return 0;
}
```
阅读全文