C语言:切换大小写奇怪的示例,不以";"结尾,也不以"break"结尾



我对我在 C 语言课程中偶然发现的这个例子感到奇怪,通常它应该递增nb_chiffres每次 c 碰巧是一个数字时(它就像一个循环,每次我们在其中输入c = getchar();)并在其他情况下递增nb_non_chiffres。

我的问题是案例不以";"结尾,也不以"break"结尾;所以我认为情况"1"包含在案例"2"中,案例"3"包含在"2"等中。 而且我没有看到该程序按预期工作。我知道如果情况"0"不是true它将执行下面的所有情况,除了default但是为什么我的老师没有在案例末尾加上";"?这是代码

switch(c){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
nb_chiffres++;
break;
default:
nb_non_chiffres++;
}

编辑:当我说这是合法的 C 代码时,我的意思是没有分号和反对大小写陈述的中断。除此之外,还有一些格式问题会导致注释中提到的编译错误。

这实际上是合法的 C 代码,这种用类 C 语言编写 Switch 语句的方式甚至有一个名字:fallthrough。

您共享的代码正在执行两项操作:

  1. 首先,案例留空,没有与之对应的语句,因此它们前面没有分号。
  2. 其次,在
  3. 所有这些情况下没有中断将导致控制基本上循环所有情况,直到违约,除非遇到中断。

看看这个问题。

最新更新