switch case 的 expected expression
时间: 2023-10-23 18:21:18 浏览: 54
在编写 switch case 语句时,expected expression 表示 switch 后面的表达式无效或缺失。这通常是由于以下几种情况引起的:
1. switch 语句中缺少条件表达式,例如:
```
switch() {
case 1:
// do something
break;
default:
// do something else
break;
}
```
2. switch 语句中的条件表达式类型不匹配,例如:
```
char c = 'a';
switch(c) {
case 1:
// do something
break;
default:
// do something else
break;
}
```
3. switch 语句中的条件表达式缺少值,例如:
```
int x;
switch(x) {
case 1:
// do something
break;
default:
// do something else
break;
}
```
在这些情况下,编译器会提示 "expected expression" 错误。要解决此错误,需要检查 switch 语句的条件表达式是否正确,并确保它具有有效的值和正确的类型。
相关问题
error C2057: expected constant expression
这个错误通常出现在你在定义数组或者 switch 语句中使用了非常量的表达式。常见的情况包括:
1. 在定义数组时使用非常量表达式作为数组大小:
```
int size = 10;
int arr[size]; // 错误,size 不是一个常量表达式
```
2. 在 switch 语句中使用非常量表达式作为 case 标签:
```
int x = 10;
switch(x) {
case 10: // 正确
break;
case x: // 错误,x 不是常量表达式
break;
}
```
要解决这个错误,你需要使用常量表达式来代替非常量表达式。例如,你可以使用 const 关键字来定义常量,或者使用 enum 枚举类型。例如:
```
const int size = 10;
int arr[size]; // 正确,size 是常量表达式
enum { x = 10 };
switch(x) {
case 10: // 正确
break;
case x: // 正确,x 是常量表达式
break;
}
```
用c++写出带有括号的后缀表达式求值代码
以下是使用 C++ 实现带有括号的后缀表达式求值的示例代码:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int eval_suffix_expression_with_parenthesis(const string& expression) {
stack<int> nums;
for (char c : expression) {
if (isdigit(c)) {
nums.push(c - '0');
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
int operand2 = nums.top(); nums.pop();
int operand1 = nums.top(); nums.pop();
int result;
switch (c) {
case '+': result = operand1 + operand2; break;
case '-': result = operand1 - operand2; break;
case '*': result = operand1 * operand2; break;
case '/': result = operand1 / operand2; break;
}
nums.push(result);
} else if (c == '(') {
nums.push(c);
} else if (c == ')') {
// Pop out elements until '(' is encountered
stack<int> sub_expression;
while (nums.top() != '(') {
sub_expression.push(nums.top());
nums.pop();
}
nums.pop(); // Pop out the '('
int sub_expression_result = eval_suffix_expression_with_parenthesis(sub_expression);
nums.push(sub_expression_result);
}
}
return nums.top();
}
int main() {
string expression = "23 34 + ( 45 56 * - ) 2 /";
int result = eval_suffix_expression_with_parenthesis(expression);
cout << "Result: " << result << endl; // Expected output: -95
return 0;
}
```
这里使用了 STL 中的 `stack` 类来实现栈的功能。函数接收一个字符串表示的后缀表达式作为输入,返回表达式的计算结果。在处理运算符时使用了 `switch` 语句来进行不同操作数之间的运算。当遇到左括号时,将其压入栈中;当遇到右括号时,不断弹出栈顶元素直到遇到左括号,将弹出的元素作为一个整体压入栈中,表示括号内的表达式的值。