一个C语言问题,快帮我解释一哈!!1

来源:百度知道 编辑:UC知道 时间:2024/06/17 18:42:55
#include"iostream.h"
void main()
{
char *s="213142";
int a=0,b=0,c=0,d=0;
int k;
for(k=0;s[k];k++)
switch(s[k])
{
default:d++;
case'1':a++;
case'3':c++;
case'2':b++;}
cout<<"a="<<a<<",b="<<b<<",c="<<c<<",d="<<D<<endl;}
上面这个程序是个习题:
(1) 该程序运行结束是,k的值是(),答案给的是6
(2) 该程序的输出结果是()答案给的是a=3,b=6,c=4,d=1
希望高手帮我解释一哈上面的switch()语句是如何执行的,详细点、、
顺便也帮解释一哈k的值为啥是6;而且 上面的程序运行是由一个错误,希望网友帮我找一哈!!!
小弟在此先谢谢了!!!!

这里有switch,而switch和case的执行方式为:
例如:
switch(表达式1)
case 表达式2:语句1
case 表达式3:语句2
case 表达式4:语句3
default :语句4
假如
表达式1的值和表达式2的值相等时程序将执行语句1,语句2,语句3,语句4;
而假如表达式1的值和表达式3的值相等时程序将执行语句2,语句3,语句4。

这里的for语句你可能也不明白。(需要看看书)
这里的S=“213142”的长度是6,而在C++/C中数组的开始下标是0,所以当k增长到6时,S[6]的值为结束符,所以就结束了循环。

问题:
(1):for循环时候,在k=5以后,k还自加了一次,此时,k=6,for循环判断s【6】不符合循环继续的条件,跳出循环,执行cout语句
(2):但是语句会一直执行到第一个break语句或者switch语句块结束。

即在读到第一个字符s【0】时,switch语句跳转到case ‘2’,执行b++,然后继续判断下一个;但是当第二个的时候s【1】时,判断是‘1’,然后switch语句跳转到case ‘1’,执行完a++以后,没发现break语句,会继续向下执行,所以这次又执行了 c++;b++;然后才继续判断下一个字符

一个错误在cout语句中,楼主把d 错写成D了

如还不明白,楼主可以hi我~~