又是一道关于break与continue的编程,帮帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/06/24 00:34:47
#include <stdio.h>
main()
{ char str[]="SSSWLIA",c;
int k;
for(k=2;(c=str[k])!='\0';k++)
{switch(c)
{case 'L':++k;break;
case 'I':continue;
default:putchar(c);continue; }
putchar('*'); }
getche();
}
答案为SW*A 为什么是这个结果啊
可不可以写得详细一点啊,我很笨的

continue的意思就是执行到这一句后
本次循环中止 下次循环开始
第一次循环读取的是SSSWLIA中的第三个S
所以前两次循环得到SW
而break只是跳出了switch这个循环 后面的语句仍旧要执行
所以第三次循环打出了L*
而第四次循环读取I不打字符
最后一次是A

这个题的答案是SW* 没有A 。。K=2时指向第三个S 非零 所以输出S跳出本次循环 ;W同理输出 ;L 对应是跳出本次循环 不执行输出星号;字符I 对应指针后移一位指向A,然后break跳出switch 并且继续执行后面的输出* ;此时指针指向的是A 所以输出星号以后k++ 为反斜杠0 故结束 楼主答案错误。。

楼主对break 和continue不理解
break语句分两种情况: 1 在switch里 用来跳出switch语句继续执行后面的 2 在循环语句中 break用来在最近的循环体中跳出来
continue语句只用于循环体 作用为结束本次循环 即跳过循环体种尚未运行的语句 并且进行下一次的判定。

SSSWLIA\0
^^^^^^^^
01234567
从2开始输出,直到字符串结尾
遇到'L':跳出switch执行putchar('*');
遇到'I':下一轮for循环

第一次str[2]是s,所以直接输出s
第二次str[3]是w,所以直接输出w
第三次str[4]是l,k先++变成5;
然后break跳出switch,
执行putchar('*'),输出*;
第四次str[6]是A,所以直接输出A
注意 由於第三次时k先++变成5,结束时在for中又k++,所以第四次时k是6.

#include <stdio.h>
main()
{ char str[]="SSSWLIA",c;
int k; <