c语言的switch多分支语句的问题!!
#include<stdio.h>main(){inta=2,b=7,c=6;switch(a>0)-----为什么把a>0改成a<0结果还是一样的{case1:swit...
#include <stdio.h>
main()
{int a=2,b=7,c=6;
switch(a>0)-----为什么把a>0改成a<0结果还是一样的
{case 1:switch(b<0)--
{case 1:printf("@");break;
case 2:printf("!");break;}
case 0:switch(c==5)------a>0成立为什么还执行case 0,case 0位假不应执行才对
{case 0:printf("*");break;
case 1:printf("#");break;
case 2:printf("$");break;}
default:printf("&");
}
}
结果输出的是“#&”
我的问题是为什么会输出#号,case 1,case 0,case 2是什么意思
针对问题回答 在网上拷贝的我不会理睬的 展开
main()
{int a=2,b=7,c=6;
switch(a>0)-----为什么把a>0改成a<0结果还是一样的
{case 1:switch(b<0)--
{case 1:printf("@");break;
case 2:printf("!");break;}
case 0:switch(c==5)------a>0成立为什么还执行case 0,case 0位假不应执行才对
{case 0:printf("*");break;
case 1:printf("#");break;
case 2:printf("$");break;}
default:printf("&");
}
}
结果输出的是“#&”
我的问题是为什么会输出#号,case 1,case 0,case 2是什么意思
针对问题回答 在网上拷贝的我不会理睬的 展开
4个回答
展开全部
//////////////////////////////////////////////////////////////////
问题的关键在于“break;”语句上,
而此程序最外层switch的case都没有break,
在没有break的情况,从匹配的case开始执行到
遇到相应层(此例为最外的switch)的case有break退出,
或者没有遇到而执行直到switch结束
/////////////////////////////////////////////////////////////////
#include <stdio.h>
main()
{
int a=2,b=7,c=6;
switch(a>0)-----switch(/*此处要求是整数*/) (a>0)的结果为true 转整数为1 执行case 1
{
case 1: ---a>0时,从开始执行
switch(b<0) -- (b<0)==false转整数0,应该执行case 0;但没有case 0:
{
case 1:printf("@");break; //
case 2:printf("!");break;
}
----此处缺少了“break;”所以继续执行下面case 0了,这就是你的问题1的答案
----a,b的值都大于0 时,你提到改siwtch(a>0或a<0),因为此case1下没有任何输出
----而且没有“break;”语句, 下面的case 0还要被执行,因此结果都一样
case 0: // 你说的改switch(a<0)时,从这里开始
switch(c==5)------(c==5)==false 转整数0 执行下面的case 1;
{
case 0:printf("*");break;
case 1:printf("#");break; //被执行 输出#
case 2:printf("$");break;
}
------此处又缺少break; 语句了 继续执行default
default:
printf("&"); ---输出&
}
}
没什么好说的了,就是break;的问题
问题的关键在于“break;”语句上,
而此程序最外层switch的case都没有break,
在没有break的情况,从匹配的case开始执行到
遇到相应层(此例为最外的switch)的case有break退出,
或者没有遇到而执行直到switch结束
/////////////////////////////////////////////////////////////////
#include <stdio.h>
main()
{
int a=2,b=7,c=6;
switch(a>0)-----switch(/*此处要求是整数*/) (a>0)的结果为true 转整数为1 执行case 1
{
case 1: ---a>0时,从开始执行
switch(b<0) -- (b<0)==false转整数0,应该执行case 0;但没有case 0:
{
case 1:printf("@");break; //
case 2:printf("!");break;
}
----此处缺少了“break;”所以继续执行下面case 0了,这就是你的问题1的答案
----a,b的值都大于0 时,你提到改siwtch(a>0或a<0),因为此case1下没有任何输出
----而且没有“break;”语句, 下面的case 0还要被执行,因此结果都一样
case 0: // 你说的改switch(a<0)时,从这里开始
switch(c==5)------(c==5)==false 转整数0 执行下面的case 1;
{
case 0:printf("*");break;
case 1:printf("#");break; //被执行 输出#
case 2:printf("$");break;
}
------此处又缺少break; 语句了 继续执行default
default:
printf("&"); ---输出&
}
}
没什么好说的了,就是break;的问题
展开全部
你说的问题是因为case如果没有用break的时候会顺次执行其后边的所有case
比如
a=1;
switch(a)
{
case 1:
printf("1\n");
case 2:
printf("2\n");
case 3:
printf("3\n");
}
会输出1 2 3
所以你的问题中case 1没用break,用了的话结果会不同
程序问题挺多,总结一下
1. 一般很少用bool型做switch的判断式
2. bool型变量只有1 ,0两个值, 所以case 2完全是出来打酱油的
3. case 不要忘了里边的break
比如
a=1;
switch(a)
{
case 1:
printf("1\n");
case 2:
printf("2\n");
case 3:
printf("3\n");
}
会输出1 2 3
所以你的问题中case 1没用break,用了的话结果会不同
程序问题挺多,总结一下
1. 一般很少用bool型做switch的判断式
2. bool型变量只有1 ,0两个值, 所以case 2完全是出来打酱油的
3. case 不要忘了里边的break
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
switch(a); switch(b);
把这个改了
switch语句的意思是 判断switch后括号里的变量 ,case 1: 如果括号里的值是1 ,case 2: 如果括号里的值是2 ,以此类推
把这个改了
switch语句的意思是 判断switch后括号里的变量 ,case 1: 如果括号里的值是1 ,case 2: 如果括号里的值是2 ,以此类推
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
switch后面的括号里应是常量表达式,而不是不等式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询