一 原题
(18)以下程序的输出是:
void main(int argc, char **argv)
{
int i;
for(i = 0;i < 3;i++){
switch(i){
case 0:
printf("%d",i);
case 2:
printf("%d",i);
default:
printf("%d",i);
}
}
}
A 000102 B 000020 C 000122 D 000111
答案: c
二 程序验证
因为linux下程序必须有返回值,将main函数的返回值改成int类型。
程序如下:
int main(int argc, char **argv)
{
int i;
for(i = 0;i < 3;i++){
switch(i){
case 0:
printf("%d",i);
case 2:
printf("%d",i);
default:
printf("%d",i);
}
}
return 0;
}
运行结果:
三 解析
switch语句快后没有break时会执行当前case后面的case语句,直至遇到break或者到达switch语句块末尾。
当i = 0时,”case 0“后面的printf语句输出完,之后没有break;继续执行"case 2"和"default"语句块,直到到达switch语句块的末尾。
四 进一步验证:
程序修改如下:
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
for(i = 0;i < 5;i++){
switch(i){
case 0:
printf("%d",i);
case 2:
printf("%d",i);
case 4:
printf("%d",i);
break;
default:
printf("%d",i);
}
}
printf("\n");
return 0;
}
运行结果: