switch语句如何在C中工作?

问题描述 投票:2回答:5

[谁能解释为什么当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;
}
c switch-statement
5个回答
2
投票

Case语句被设计为可以直接进入下一个情况,除非它们具有break语句以将执行从整个开关中拉出。在这种情况下,您对“ case 0”的break语句表示赞赏,因此执行向下滑至“ case 1”,然后将y分配给4。


3
投票

switch(x)操作之后,执行将首先跳转到相应的case N语句。然后,它在该语句之后执行代码,直到a)找到由方括号(switch(x))定义的{}边界的末尾,或b)找到开关内的break语句,并结束该开关。

在您的情况下,它从y=3下降到case 1,然后下降到y=4,然后在break处结束。


2
投票

您在第一个案例陈述中注释了break;陈述!

所以只写这个:

(否则,当x为0或1 y分配给3,然后分配给4)

case 0:
    y = 3;
    break;
如果switch语句缺少一个break;语句,则转到下一个case!如果您忘记了所有这些命令,则:D然后在switch语句的结尾处停止,并执行所有行!

1
投票
因为break被注释掉:

switch (x) { case 0: y = 3; //break; <---- commented out.

并且对于每个新手来说,除非遇到中断(或返回),否则执行都是从'匹配'情况开始的。

我确定这在当时似乎是个好主意,并且有一些非常有用的编码技巧可以利用它。Duff的设备最出名。

http://en.wikipedia.org/wiki/Duff's_device

1000次中有999次,这是一个令人讨厌的错误,需要一个小时才能找到。


0
投票
[1490年代,克里斯托弗·哥伦布(Christopher Columbus)在美洲的伊斯帕尼奥拉(Ispaniola)和古巴岛上建立了最早的西班牙殖民地。从那里,大胆的西班牙占卜者被称为征服者,搜寻美洲以获得黄金。1588年,他利用战争和婚姻来增强欧洲的天主教信仰,菲利普(Philip)派遣了一支由士兵组成的庞大舰队,以入侵和征服英格兰。熟练的英国海军上尉摧毁了菲利普的舰队,即西班牙舰队。1581年,荷兰联合省宣布脱离西班牙独立。新独立的荷兰仅包括西班牙荷兰北部的七个省。南部的十个省(今天是比利时)大部分是天主教徒,仍处于西班牙的控制之下。作为法国加尔文主义少数派的成员的法国天主教徒和胡格诺派的暴民被称为仇恨并相互战斗。尽管她的动机是出于政治目的,但凯瑟琳本人还是批准了巴黎的圣巴塞洛缪日大屠杀,这场大屠杀中约有12,000人死于胡格诺派。1555年,德国诸侯签署了《奥格斯堡和约》,同意德国的教会可以是天主教或路德教会,但不能是加尔文教派。每个国家的王子将决定其信仰。随着时间的流逝,天主教徒和路德教会的王子组成了同盟,威胁了不确定的和平

阅读问题之前


阅读后(复习)

征服者-西班牙探险者总督-皇家总督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-

© www.soinside.com 2019 - 2024. All rights reserved.