以下程序段为什么会进入死循环?
发布网友
发布时间:2022-05-17 05:30
我来回答
共6个回答
热心网友
时间:2023-10-09 09:36
楼上的几位都没有把握关键!
楼主虽然在循环体中加入了break语句,
但要注意执行break语句的条件-->(i==6)
由程序i永远也不会是6!
这才是关键!
另外,程序有错,int i=0,s=0 后面没有分号!
下面,我们走一下程序,
i初值为零,
进入循环体,i!=3,i!=5,i!=6;
所以此轮循环后i自身加1,s自身加i
于是下轮循环时,i=1,s=1;
i进入此轮循环式的值为1,s为1,
进入循环体,i!=3,i!=5,i!=6;
所以此轮循环后i自身加1,i=2,s自身加i
与时下轮循环时,i=2,s=3;
i进入此轮循环式的值为2,s为3,
进入循环体,i!=3,i!=5,i!=6;
所以此轮循环后i自身加1,i=3,s自身加i
与时下轮循环时,i=3,s=6;
i进入此轮循环式的值为3,s为6,
进入循环体,i==3,直接跳入下一轮循环
所以此轮循环后i的值仍为3,s=6
(在continue语句下,后面的语句在本轮循环中不执行)
于是下一轮循环中,i的值仍为3,s=6
于是,在以后的循环中,i都会因为其值为3而不断跳入下一轮循环。而i的值将永远不会再改变,所以i永远都不会等于6,所以永远不会退出for循环,于是就进入了死循环!
如果楼主是想求1+2+4的值,
可以这样改:(也许楼主不是这个意思...)
main()
{
int i=0,s=0;
for (;;)
{
i++;
if(i==3||i==5) continue;
if (i==6) break;
s+=i;
};
printf("%d\n",s);
}
热心网友
时间:2023-10-09 09:37
请问LZ想要程序运行什么结果啊,如果只想让他不进入死循环,改动这个就可以拉
main()
{
int i=0,s=0
for (;或者在这里加个控制条件;)
{
if(i==3||i==5) continue; //continue改成break
if (i==6) break;
i++;
s+=i;
};
printf("%d\n",s);
}
热心网友
时间:2023-10-09 09:37
missing ';' before 'for'
for前少了一下分号~!~
看好了:
i s
0 0
1 1
2 3
3 6 (i=3时,你用了CONTINUE,变量i的值不能得到增加了~!)
热心网友
时间:2023-10-09 09:38
关键就在for (;;)
for语句的一般形式为(表达式1;表达式2;表达式3)
我们可以看到表达式1,2,和3全部被省略
表达式1被省略,不过在for语句之前已经给变量赋初值了,无影响
表达式2被省略,也就是认为表达式2始终为真,循环就会无终止地进行 下去啊
表达式3也被省略,循环无法结束啊
3个全省略,主要是第二个被省略,注定了这是一个永无终止的循环
热心网友
时间:2023-10-09 09:39
continue的作用是本次循环结束,从头开始进入下一次循环
i=3时执行到continue,后面部分就跳过去了,i值不改变,所以死循环了
热心网友
时间:2023-10-09 09:39
循环体中没有判断跳出循环的语句,所以会永远循环下去,break只是不执行一下语句返回循环的头部,继续执行。