请问C语言里switch里case里可以有if语句吗?

比如下面这样写对吗?
switch(i){
case 1:
if(....)

代码。。。。

else

代码。。。

break;
case 2:
代码。。。。

break;
}

这样加if语句对吗?

C语言里switch里case里是可以有if语句,但是要注意编程时的兼容情况。switch语句只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。

Switch用在编程中,如C语言中它经常跟Case一起使用,是一个判断选择代码。其功能就是控制业务流程流转的。直线翻译:switch语句,即“切换”语句;case即“情况”。

switch语句的语法如下(switch,case和default是关键字):

switch ( 常量表达式 ){

case 常量1 :语句;

case 常量2 :语句;

case 常量3 :语句;

...

case 常量n:语句;

default :语句;}

扩展资料

switch语句执行时会从上到下根据括号中表达式的值作比较,当某个case语句中的表达式与此值相同时,就执行这个case语句或语句序列,直到遇到break为止。 break语句是必须有的,它用来结束switch语句的执行。

如果所有case语句后面的表达式都不等于switch语句的表达式expr1的值川0执行default后面的默认语句序列。不过,default部分是可选的。如果没有这一部分,并遇到所有case语句都不匹配,那么,就不作任何处理而进入后续程序段的执行。

参考资料来源:百度百科——switch

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-20
可以的,
不过要提醒你一点 , 有的编译器做得不是很智能, 在其中case下不加{}这样的限制符号可能会出错.
所以对你的代码, 我推荐的用法是
switch(i){

case 1:
{
if(....)

代码。。。。

else

代码。。。

break;
}

case 2:
{
代码。。。。

break;
}

}本回答被提问者采纳
第2个回答  推荐于2017-09-04

C语言switch语句的每个case中都可以嵌套使用if语句。

C语言提供的一种用于多分支选择的switch语句, 其一般形式为:

switch(表达式){ 
    case 常量表达式1:  语句1;
    case 常量表达式2:  语句2;
    … 
    case 常量表达式n:  语句n;
    default:  语句n+1;
}

其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

注意事项

    在case后的各常量表达式的值不能相同,否则会出现错误。

    在case后,允许有多个语句,可以不用{}括起来。

    各case和default子句的先后顺序可以变动,而不会影响程序执行结果。

    default子句可以省略不用。


为了避免程序从对应case一直往下执行,C语言提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。在后面还将详细介绍。

示例,输入月份和年份,输出该年的该月有多少天:

#include <stdio.h>
int main(void){
    int m, y;
    printf("input month and year:    ");
    scanf("%d%d",&m, &y);
    switch (m){
        case 1:printf("31\n");  break;
        case 2:
            if ((y%4==0&&y%100!=0)||y%400==0)printf("29\n");
            else printf ("28\n");
            break;
        case 3:printf("31\n");  break;
        case 4:printf("30\n");  break;
        case 5:printf("31\n");  break;
        case 6:printf("30\n");  break;
        case 7:printf("31\n");  break;
        case 8:printf("31\n");  break;
        case 9:printf("30\n");  break;
        case 10:printf("31\n");  break;
        case 11:printf("30\n");  break;
        case 12:printf("31\n");  break;
        default:printf("error\n");
    }
    return 0;
}
/*
输入:2 2015
输出:28
*/

第3个回答  2013-04-07
没问题的,放心用。在switch语句中,你可以完全拿case当标号使用。
甚至下面这种写法都是允许的,但是要想当小心你的逻辑。
switch(i){
case 0:
if(xxx){
yyyyy;
case 1:
zzzzz;
}
}
第4个回答  2013-04-07
可以的,switch是一种选择语句,跟if else不冲突的,这也能体现出c语言的灵活吧。
相似回答