C语言里case后加不加括号问题

C语言里使用case要注意的问题

  1. 一般情况要加上break;
  2. case后面必须为整型数字或者字符类型

case后面的语句不需要加大括号,只要别忘了break就行。不过有的编程规范上会建议用大括号把case后面的语句括起来。 
你说的“不能通过编译”,可能是下面这个原因。C/C++里规定,不能在case语句里定义局部变量。例如:

int a = 2;
    switch (a)
    {
    case 1:
        int c = 10;
        break;
    case 2:
        break;
    default:
        break;
    }

编译就会出错,原因是在case 1里定义了局部变量c。 
而C/C++还有一个很有意思的规定,用{}包括的语句,认为是一个”语句块“,而在语句块里就能想干什么就干什么。 
比如:

switch (a)
    {
    case 1:
        {
        int c = 10;
        break;
        }
    case 2:
        break;
    default:
        break;
    }

这样就能通过编译了。

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个C语言数据结构括号匹配的检验代码示例: ```c #include <stdio.h> #include <string.h> #define MAX_STACK_SIZE 100 char stack[MAX_STACK_SIZE]; int top = -1; void push(char c) { stack[++top] = c; } char pop() { return stack[top--]; } int is_empty() { return (top == -1) ? 1 : 0; } int is_full() { return (top == MAX_STACK_SIZE - 1) ? 1 : 0; } int is_matching_pair(char left, char right) { if (left == '(' && right == ')') return 1; else if (left == '{' && right == '}') return 1; else if (left == '[' && right == ']') return 1; else return 0; } int is_balanced(char expr[]) { int i; for (i = 0; i < strlen(expr); i++) { if (expr[i] == '(' || expr[i] == '{' || expr[i] == '[') push(expr[i]); if (expr[i] == ')' || expr[i] == '}' || expr[i] == ']') { if (is_empty()) return 0; else if (!is_matching_pair(pop(), expr[i])) return 0; } } if (is_empty()) return 1; else return 0; } int main() { char expr[MAX_STACK_SIZE]; printf("Enter expression: "); scanf("%s", expr); if (is_balanced(expr)) printf("The expression is balanced.\n"); else printf("The expression is not balanced.\n"); return 0; } ``` 在此代码中,我们定义了一个字符数组`stack`作为栈,并通过`top`变量记录了栈顶的下标。然后我们实现了一些基本的栈操作,比如`push`和`pop`等。 接着,我们定义了一个`is_matching_pair`函数来判断左右括号是否匹配。接着,我们定义了一个`is_balanced`函数来检验括号是否匹配。 在`is_balanced`函数中,我们对输入的字符数组进行遍历。如果遇到左括号,我们将其压入栈中。如果遇到右括号,我们先判断栈是否为空,如果为空,则说明缺少左括号使其匹配不上,我们直接返回0。否则,我们将栈顶元素弹出,并检查左右括号是否匹配。如果不匹配则返回0。循环结束后,如果栈为空则说明括号都已经匹配上了,返回1,否则返回0。 最后在main函数中,我们读取输入的字符数组,调用`is_balanced`函数进行匹配检验,并输出相应的结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值