[谁能解释为什么当x = 0时此代码的输出为4(我认为x如果为0,则适用case 0:
和y假定为3,在这种情况下我错了。
#include <stdio.h>
int main()
{
int x = 0;
int y;
switch (x) {
case 0:
y = 3;
case 1:
y = 4;
break;
default:
y = 5;
break;
}
printf("%d", y);
getchar();
return 0;
}
Case语句被设计为可以直接进入下一个情况,除非它们具有break语句以将执行从整个开关中拉出。在这种情况下,您对“ case 0”的break语句表示赞赏,因此执行向下滑至“ case 1”,然后将y分配给4。
switch(x)
操作之后,执行将首先跳转到相应的case N
语句。然后,它在该语句之后执行代码,直到a)找到由方括号(switch(x)
)定义的{}
边界的末尾,或b)找到开关内的break
语句,并结束该开关。
在您的情况下,它从y=3
下降到case 1
,然后下降到y=4
,然后在break
处结束。
您在第一个案例陈述中注释了break;
陈述!
所以只写这个:
(否则,当x为0或1 y分配给3,然后分配给4)
case 0:
y = 3;
break;
如果switch
语句缺少一个break;
语句,则转到下一个case
!如果您忘记了所有这些命令,则:D然后在switch
语句的结尾处停止,并执行所有行!break
被注释掉:switch (x) {
case 0:
y = 3;
//break; <---- commented out.
并且对于每个新手来说,除非遇到中断(或返回),否则执行都是从'匹配'情况开始的。我确定这在当时似乎是个好主意,并且有一些非常有用的编码技巧可以利用它。Duff的设备最出名。
http://en.wikipedia.org/wiki/Duff's_device
1000次中有999次,这是一个令人讨厌的错误,需要一个小时才能找到。
阅读问题之前
征服者-西班牙探险者总督-皇家总督Encomienda-正确/占据区域资本主义-该系统,商人加入了商业活动,以投资他们的钱并获得利润商业革命-其他国家的商人很快遵循荷兰的贸易,利润和投资模式埃尔南·科尔特斯(Hernan Cortes)-征服者征服了阿兹台克人Fransisco Pizzaro-征服者征服了印加人菲利普斯二世-查理五世之子伊丽莎白-英格兰女王西班牙舰队-1588年,菲利普(Philip)派遣了一支由士兵组成的庞大舰队,以入侵和征服英格兰。熟练的英国船长摧毁了菲利普的舰队,被称为西班牙舰队塞万提斯(Miguel de Cervantes)-作家塞万提斯(Miguel de Cervantes)出品的唐吉Qui德(Don Quixote de la Mancha)通常被称为第一部现代欧洲小说奥兰治的威廉-荷兰起义的最大领袖是奥兰治的威廉王子凯瑟琳·德·美第奇-凯瑟琳·德·美第奇统治了未来30年的法国(母亲)雨格诺派(Huguenots)-法国加尔文主义少数派的成员被称为仇恨并相互战斗亨利-亨利成为第一位波旁王朝的国王。他统治亨利四世直到1610年去世南特令-亨利发布南特the令,宣布法国的Huguenots但在巴黎市以外的人可以和平地敬拜费迪南德-波西米亚国王费迪南德二世,1619年后为神圣罗马皇帝三十年战争-在这场复杂而艰苦的斗争中,哈普斯堡家族在德国领土上与德国和外国敌人作战威斯特伐利亚条约–于1648年结束了三十年战争。
Q&A-