循环的嵌套问题简单在线等

来源:百度知道 编辑:UC知道 时间:2024/06/07 12:22:28
为啥答案变成了 0 0 0 8 纳?最后一个为啥突然变成了 8 ?
高手详细解释一下!!!
#include<stdio.h>
void main()
{
char s[]={"12134211"};int v[4]={0,0,0,0},k,i;
for(k=0;s[k];k++)
{
switch(s[k])
{
case '1':i=0;
case '2':i=1;
case '3':i=2;
case '4':i=3;
}
v[i]++;printf("%3d",v[i]);
}printf("\n");
for(k=0;k<8;k++)
printf("%3d",v[k]);printf("\n");
}
上面的是我改之后的,为啥答案是 0 0 0 8 ?最后一个为啥是8?
看这个是原题:
#include<stdio.h>
void main()
{
char s[]={"12134211"};int v[4]={0,0,0,0},k,i;
for(k=0;s[k];k++)
{
switch(s[k])
{
case '1':i=0;
case '2':i=1;
case '3':i=2;
case '4':i=3;
}
v[i]++;
}
for(k=0;k<4;k++)
printf("%3d",v[k]);
}

楼主
switch()语句中case分支后面如果没有break语句,则依次执行
比如
k=0,s[k]=1,case '1':i=0,因为没有break语句,依次执行i=2,i=3,这时不再判断case的条件了,所以k=0时,i=3,v[i]++=,即v[3]=1
同理
当k=1,2,3,4,5,6,7时,i始终是3,v[3]=2,3,4,5,6,7,8
所以最后输出的结果为 v[0]=0,v[1]=0,v[2]=0,v[3]=8

每个case后面都少了一个break语句。
所以每次i的值都是3

因为第个case 后面都没有breakm, 所以每次switch语句都顺序执行了所有的语句,即每次i都是3,每次都是v[3]自增1,循环了8次,所以最后输出8。