#include <stdio.h>
void main()
{
int k=2;
switch(k)
{
case 1: printf("%2d",k++);
case 2: printf("%2d",k++);
case 3: printf("%2d",k++);
case 4: printf("%2d",k++);break;
default: printf("Full!\n");
}
}
% 2dC程序语言书上不是写过嘛?当k的值为2时,程序从case 2开始执行,没有break停止,就一直到4输出k的值。k++和++k的基本知识你得好好去了解下,
%2d是一个格式化输出的占位符打印整数,至少占据2个字符的宽度。
case 2 和 case 3 后面都没有break,所以匹配到它们,执行完都是会继续执行下面的case,直到遇到有break并退出switch
%2d 打印两位数字, 对齐方式是 右对齐,不足的两位前面补空格
%2d是数字以2位宽度显示,如果不足2位前面补空格,超过2位输出原数。
测试如下:
参考链接:
#include <stdio.h>
int main()
{
int k=2;
switch(k) // 因为初始k为2,这里匹配case 2,所以switch里面先进入case 2 执行
{
case 1: printf("%2d",k++);
// 这里因为k初始为2,所以打印: 2,2前面有个空格, 以保持2位数字宽度 和%2d对应
//然后++, k变为3
// https://blog.csdn.net/qq_41348629/article/details/109683026
case 2: printf("%2d",k++);
// 因为前面的case没有break,所以继续执行这个case
// 前面k变为了3 , 所以这里打印: 3,3前面也有个空格, 同样是保持2位数字宽度
// 然后++, k变为4
case 3: printf("%2d",k++);
// 同上,k为4 ,打印:4, 4前面也有个空格,保持2位数字宽度,与%2d相对应
// 然后++变为5,但是后面没有打印语句,并且这里有break就退出了switch-case语句
// 所以总共打印出来的就是: 2 3 4, 每个数字前面一个空格
case 4: printf("%2d",k++);break;
default: printf("Full!\n");
}
}
1.case里没有break会贯穿标签,执行后续标签里的代码
2.%2d的意思是输出占2个字符宽度,不足2字符在左侧补空格
如果直接写%d,那么输出会是234,中间没有空格