#include <stdio.h>
main()
{
char*s="01234";
while(*(++s)!='\0')
{
switch(*s-'0')//字符"0"不参与
{
case 0:
case 1:putchar(*s+1);break;
case 2:putchar(*s+1);break;
case 3:putchar(*s+1);//"3",对应此处,输出2次4
default:putchar(*s+1);break;//"4",对应此处,输出5
}
}
}
//输出结果为 23445
正确的输出应该是123445哈
明确switch中的case语句如果没有break会继续向下执行,比如,这里面case 3中没有break语句,则会把default中的语句继续执行下去
while循环就是遍历s这个字符串,每一个字符减去‘0’,得到的就是和‘0’的差,刚好就是数字0、1、2
循环一开始,s指向字符串的第一个字符,*s='0' s-'0' = 0, 执行case 0语句,这个语句没有break,所以执行case 1,输出s + 1 = 1
剩下的以此类推
while(*(++s)!='\0')
会不会是这里,++s 直接指向了下一个字符,跳过了0呀