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

比如下面这样写对吗?switch(i){case1:if(....)代码。。。。else代码。。。break;case2:代码。。。。break;}这样加if语句对吗?... 比如下面这样写对吗?
switch(i){
case 1:
if(....)

代码。。。。

else

代码。。。

break;
case 2:
代码。。。。

break;
}

这样加if语句对吗?
展开
 我来答
写在枫叶上的故事
推荐于2019-08-11 · TA获得超过2.6万个赞
知道答主
回答量:164
采纳率:0%
帮助的人:2.4万
展开全部

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

dysh1985
推荐于2017-09-20 · TA获得超过158个赞
知道答主
回答量:24
采纳率:100%
帮助的人:25.2万
展开全部
可以的,
不过要提醒你一点 , 有的编译器做得不是很智能, 在其中case下不加{}这样的限制符号可能会出错.
所以对你的代码, 我推荐的用法是
switch(i){

case 1:
{
if(....)

代码。。。。

else

代码。。。

break;
}

case 2:
{
代码。。。。

break;
}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wchyumo2011
推荐于2017-09-04 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2751万
展开全部

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

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

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

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

注意事项

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

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

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

  4. 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
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寻森良Z
2013-04-07 · TA获得超过368个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:129万
展开全部
没问题的,放心用。在switch语句中,你可以完全拿case当标号使用。
甚至下面这种写法都是允许的,但是要想当小心你的逻辑。
switch(i){
case 0:
if(xxx){
yyyyy;
case 1:
zzzzz;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wee616
2013-04-07 · TA获得超过170个赞
知道答主
回答量:72
采纳率:0%
帮助的人:30.1万
展开全部
可以的,switch是一种选择语句,跟if else不冲突的,这也能体现出c语言的灵活吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式