当前位置: 代码迷 >> C语言 >> ●●★☆一个奇怪的现象☆★●●
  详细解决方案

●●★☆一个奇怪的现象☆★●●

热度:122   发布时间:2008-04-28 15:55:39.0
●●★☆一个奇怪的现象☆★●●
for语句
for(表达式1;表达式2;表达式3)
{  
        语句;
}
可以用
表达式1;
while(表达式2)
{     
        语句;
        表达式3;
}
替换
但我按照以上格式写了两个小程序:
#include<stdio.h>
void main()
{
        int a;
        for(a=1;a<10;a++)
        {     
                if(a<3) continue;
                if(a=5) break;
         }
        printf("%d",a);
}

#include<stdio.h>
void main()
{
        int a;
        a=1;
        while(a<10)
            {
                    if(a<3) continue;
                    if(a=5) break;
                    a++;
            }
        printf("%d",a);
}
运行结果却不一样。
前者不能理解。
从循环的执行过程也可以发现,这其中有点怪

[[it] 本帖最后由 bianchengfeng 于 2008-4-28 16:03 编辑 [/it]]
搜索更多相关的解决方案: 现象  语句  表达  void  continue  

----------------解决方案--------------------------------------------------------
所以说 当循环体中有continue的时候就不可以替换
----------------解决方案--------------------------------------------------------
while(a<10)
{
  if(a<3) continue;
  if(a=5) break;
       a++;
}
如果continue了就不执行a++这句话了
而for循环中continue时还要执行a++的
----------------解决方案--------------------------------------------------------
continue 的功能是结束本次循环,即跳过循环体中下面尚未执行的语句,把程序流程转移到当前循环语句的下一个循环周期,并根据循环控制条件决定是否重复执行该循环体。第二个程序你定义a=1,进入while循环后,第一句是if(a<3) continue;a=1是满足条件的,所以结束本次循环,下面两句不会执行,a永远是1,相当于进入死循环,不会有输出结果。而第一个程序输出结果是5。
----------------解决方案--------------------------------------------------------
还有一种 会更让你想不通
void main()    //功能:大小写转换
{  char ch[50];
   gets(ch);
for(int i=0;i<50;i++)
{ if( ch[i]>='a'&&ch[i]<='z') ch[i]=ch[i]-32; //小写转大写
  if( ch[i]>='A'&&ch[i]<='Z') ch[i]=ch[i]+32;  //大写转小写
}
  puts(ch);
}
  以上运行没没有得到你想要的结果,两个if只运行第二个;
  如果你把它们的顺序换过来,还是只运行第二个 if;
  但如果你 在 第一个if里加 continue.那么两个都运行了,就会得到你想要的结果
----------------解决方案--------------------------------------------------------
if(a=5) break;
应该是
if(a==5) break;
吧,不然循环执行一次就完了
----------------解决方案--------------------------------------------------------
#include<stdio.h>
void main()
{
        int a;
        a=1;
        while(a<10)
            {
                    if(a<3) continue;
                    if(a=5) break;
                    a++;
            }
        printf("%d",a);
}
这个会一直循环,因为a始终是1
----------------解决方案--------------------------------------------------------
回复 5# 的帖子
5#的错因是,运行打一个if是将所有的小写字母都转化成为大写字母
再运行第二个if事将所有的大写字母转化成为了小写的所以结果看上去第一个if好像是没有运行
其实是运行了。可以在第二个if前面加上else
----------------解决方案--------------------------------------------------------
顶顶顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
----------------解决方案--------------------------------------------------------
  相关解决方案