精华内容
下载资源
问答
  • 关于跳出while(1)死循环问题
    万次阅读
    2018-08-07 18:31:33

    最近也是再看题的时候看到了这个东西。同样也是再写需求中出现的东西。也就是while(1)死循环,有时候我们想让一个while一直循环。到需要的时候跳出循环。这种要怎么办???

    来看一道题:

    while(1){
        switch("a"){
            case "a" :
                console.log(true);
            //修改代码不让while死循环,但是不能用break
        }
    }

    看到这里,心里想的不让用break怎么办啊?? 经过冷静下来想到了可以用try  catch语句跑出异常来使用。亲测试了一下,也算可以。

    try{
        while (1) {
           switch("a"){
               case "a" :
                  console.log(true);
               throw new Error("跳出循环");
            }  
        }
    } catch(e){
        console.log(e.name);
    }

    然后通过查查文档,找到了一个基础的方法,JavaScript标签。可以说成标记的作用,可以配合着break和continue来使用。也就是JavaScript版本的goto实现。

    out: 
    for(let i = 0; i < 1; i ++){     
            while(1){
                switch("a"){
                    case "a" :
                        console.log(true);
                        
                }
                continue out;
            }
        }

    第三个方法,也就是简单粗暴的return;。

    function fn(){               
        while(1){
            switch("a"){
                case "a" :
                    console.log(true);
                    return;
            }           
        }
    }
    fn();

    如果帮的到的话请点个赞吧,有什么错误的话,或者有更好的方法,可以留言一下。

    主页传送门

    更多相关内容
  • 能够从while1)循环中出去吗?

    千次阅读 2021-05-20 15:52:58
    回复: 48能够从while(1)循环中出去吗?(307841813)出0入0汤圆电梯直达发表于 2011-8-16 14:12:33|只看该作者|倒序浏览|阅读模式刚想再switch语句中的case选择下一种情况,可是出现无法出去了 是因为加了个while...

    回复: 48

    e5a73b6a7586c690ae7a720f72a4e733.png

    ccfb3c64a5000ccc1971125e1fdae7b2.png

    20f7beba86b4a360a2108c8a34a4ebf3.png

    能够从while(1)循环中跳出去吗?

    83ce3ea77387579801bba450dd75b32b.png

    (307841813)

    出0入0汤圆

    电梯直达

    ac34f29e61779188a50d361fdeae2c1f.png

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:12:33

    |

    只看该作者

    8d1228179cec554492e4b5a60a447513.gif

    |倒序浏览

    |阅读模式

    刚想再switch语句中的case选择下一种情况,可是出现无法跳出去了 是因为加了个while语句

    switch(w)

    {

    case 0 :

    {        ShowString(20,20,"EGC",0,255);

    break;

    }

    case 1 :

    {        LCD_Clear(255,0);          //清屏

    ShowString(2,2, "START",0xe0,255);

    Delay(15);

    while(1)

    {

    AD_value=ADC_GetConversionValue(ADC1);

    value=AD_value*3.3/4096.0;

    ........}

    break;

    }

    case 3 :

    ....

    知道是因为有了while循环在, 可是必须得用死循环

    不知道大家有什么好的方法,

    让case语句能够使用 ,

    是否while(1)也可以跳出来呢?

    9f3da09aea01dc85044b2dcf89bebbd6.png

    (307841537)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:17:09

    |

    只看该作者

    goto?

    精华汤圆中级会员

    {*}

    417ed852d27e8c159716eac4e3779f56.gif

    a455484b8fc2a083b66cc093fe04f157.png

    (307841450)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:18:36

    |

    只看该作者

    嗯 goto 应该可以

    857aec468e5c7e92184cc71b68a544ec.png

    (307841270)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:21:36

    |

    只看该作者

    没看明白啥意思

    少用goto

    尽量用条件循环代替while(1)

    0dfcc56120449999ea7d19daff2ad850.png

    (307841239)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:22:07

    |

    只看该作者

    在while(1)的大括号中需要跳出的语句后加break就可以跳出。

    9e478ad346645082cb6f34495505bfea.png

    (307841043)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:25:23

    |

    只看该作者

    如果在函数里面,RETURN也可以退出

    8e39bd1aa28584a97c0051ae865dd627.png

    (307840639)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:32:07

    |

    只看该作者

    while(1)内使用条件 break;switch中需要跳出时置跳出条件。

    16_avatar_middle.jpg

    (307840562)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:33:24

    |

    只看该作者

    bool flag = TRUE;

    while (flag)

    {

    ...

    if (条件满足,需要跳出while循环)

    flag = FLASE;

    ...

    }

    d0a6306c0ce8324ba47c2e4503a4261c.png

    (307840051)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:41:55

    |

    只看该作者

    回复【7楼】xiaoking 蒋杰

    bool flag = true;

    while (flag)

    {

    ...

    if (条件满足,需要跳出while循环)

    flag = flase;

    ...

    }

    -----------------------------------------------------------------------

    同意这个, goto 之类的东西还是尽量别用

    另外楼主的话其实有点自相矛盾, 你既要跳出去, 还要死循环, 这本身就矛盾吗

    既然要跳出去, 就说明这个循环不是死循环, 是有跳出去的条件的

    374a1e6b5a46433edab800f116cbc110.png

    (307839465)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 14:51:41

    |

    只看该作者

    没有什么是绝对必须要用的,可以考虑在中断或主循环里计算。

    99_avatar_middle.jpg

    (307838765)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 15:03:21

    |

    只看该作者

    顶7楼

    117656d143f9bbefc69ce7e2d2609c18.png

    (307837999)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 15:16:07

    |

    只看该作者

    不推荐用while(1) 容易造成死循环,7楼的方法不错.

    15_avatar_middle.jpg

    (307836427)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 15:42:19

    |

    只看该作者

    断电,就可以了

    9ac4d1d14fd4eee6ad4754963b44e589.png

    (307834597)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 16:12:49

    |

    只看该作者

    回复【11楼】dongls  董

    不推荐用while(1) 容易造成死循环,7楼的方法不错.

    -----------------------------------------------------------------------

    那是你程序没写好。。。俺刚用了个。。。

    当前离线积分

    精华汤圆注册会员

    {*}

    417ed852d27e8c159716eac4e3779f56.gif

    2964f19a03731ccd4f6d24eeb5b1e42e.png

    (307832044)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 16:55:22

    |

    只看该作者

    调试的时候尝试过跳出main函数执行,结果是程序直接跑飞

    75b02424b22007d5c7344245b4d56742.png

    (307827096)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 18:17:50

    |

    只看该作者

    七楼真的回复的好啊

    回复【7楼】xiaoking 蒋杰

    bool flag = true;

    while (flag)

    {

    ...

    if (条件满足,需要跳出while循环)

    flag = flase;

    ...

    }

    -----------------------------------------------------------------------

    同意这个, goto 之类的东西还是尽量别用

    另外楼主的话其实有点自相矛盾, 你既要跳出去, 还要死循环, 这本身就矛盾吗

    既然要跳出去, 就说明这个循环不是死循环, 是有跳出去的条件的

    83ce3ea77387579801bba450dd75b32b.png

    (307825605)

    出0入0汤圆

    3ed6c70162101cdc4cfc0ceaf175c8cd.png

    楼主|

    发表于 2011-8-16 18:42:41

    |

    只看该作者

    回复【8楼】alengend

    -----------------------------------------------------------------------

    恩 感谢 呵呵 是有点矛盾

    本意是while里面的句子能够循环

    但是还得照顾case语句 希望case里面的break依旧有效

    83ce3ea77387579801bba450dd75b32b.png

    (307825537)

    出0入0汤圆

    3ed6c70162101cdc4cfc0ceaf175c8cd.png

    楼主|

    发表于 2011-8-16 18:43:49

    |

    只看该作者

    回复【1楼】fnems

    -----------------------------------------------------------------------

    goto语句 都说少用 所以 用的也比较少 要是没有选择的话才用 尽量别用

    83ce3ea77387579801bba450dd75b32b.png

    (307825182)

    出0入0汤圆

    3ed6c70162101cdc4cfc0ceaf175c8cd.png

    楼主|

    发表于 2011-8-16 18:49:44

    |

    只看该作者

    回复【7楼】xiaoking 蒋杰

    -----------------------------------------------------------------------

    bool flag = true;

    while (flag)

    {

    ...

    if (条件满足,需要跳出while循环)

    flag = flase;

    ...

    }

    -----------------------------------------------------------------------

    这个好 非常感谢

    之前还想再while里面判断case条件是否成立

    结果更加混乱 又学到了啊

    83ce3ea77387579801bba450dd75b32b.png

    (307824993)

    出0入0汤圆

    3ed6c70162101cdc4cfc0ceaf175c8cd.png

    楼主|

    发表于 2011-8-16 18:52:53

    |

    只看该作者

    回复【13楼】huayuliang 花生

    回复【11楼】dongls  董

    不推荐用while(1) 容易造成死循环,7楼的方法不错.

    -----------------------------------------------------------------------

    那是你程序没写好。。。俺刚用了个。。。

    -----------------------------------------------------------------------

    我的那个程序确实有问题啊

    呵呵

    stm32中 有些是得用while(1)的

    精华汤圆VIP

    {*}

    417ed852d27e8c159716eac4e3779f56.gif

    2e55b1403c1747d1e1ab61dc69fdc31f.png

    (307824136)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 19:07:10

    |

    只看该作者

    goto 就可以。。

    while(1)

    {

    ~~~

    ~~

    if (xx)

    goto next;

    else

    xxx;

    }

    next:

    xxxx;

    4ae65951baaa66b38f469c2b3886150f.png

    (307823847)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 19:11:59

    |

    只看该作者

    用return

    7c08664c030e27f0773bed95bc4e97dd.png

    (307821875)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 19:44:51

    |

    只看该作者

    LINUX内核和WINDOWS MFC中都有用GOTO的。没什么大不了。

    LZ的程序用那么多WHILE,结构应该重规划,而不是想如何跳出了。

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-16 19:53:36

    |

    只看该作者

    回复【7楼】xiaoking 蒋杰

    bool flag = true;

    while (flag)

    {

    ...

    if (条件满足,需要跳出while循环)

    flag = flase;

    ...

    }

    -----------------------------------------------------------------------

    这样写,条件满足后,后面的 ...段还要再执行一次吗?

    83ce3ea77387579801bba450dd75b32b.png

    (307812980)

    出0入0汤圆

    3ed6c70162101cdc4cfc0ceaf175c8cd.png

    楼主|

    发表于 2011-8-16 22:13:06

    |

    只看该作者

    回复【22楼】Excellence 精益求精

    linux内核和windows mfc中都有用goto的。没什么大不了。

    lz的程序用那么多while,结构应该重规划,而不是想如何跳出了。

    -----------------------------------------------------------------------

    恩 确实

    感觉思路不太清晰 程序间会撞车

    得重新规划下

    16_avatar_middle.jpg

    (307774825)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 08:49:01

    |

    只看该作者

    回复【23楼】liangyurongde

    回复【7楼】xiaoking 蒋杰

    bool flag = true;

    while (flag)

    {

    ...

    if (条件满足,需要跳出while循环)

    flag = flase;

    ...

    }

    -----------------------------------------------------------------------

    这样写,条件满足后,后面的 ...段还要再执行一次吗?

    -----------------------------------------------------------------------

    还会再执行1次

    如果不需要执行,可将if()判断放在最后,或者这样:

    bool flag = true;

    while (flag)

    {

    ...

    if (条件满足,需要跳出while循环)

    flag = false;

    else

    {

    ...

    }

    }

    实际代码需要根据具体程序功能编写

    9eabe1fdf703c3b79ef422591faa5f61.png

    (307774450)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 08:55:16

    |

    只看该作者

    都是高手,呵呵

    7c08664c030e27f0773bed95bc4e97dd.png

    (307773228)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 09:15:38

    |

    只看该作者

    如果是在MAIN中,那么一个WHILE(1)和一个SWITCH就可以解决95%的事情。

    其他都是跳转条件。

    17c7e24a0d625eddf6ed6ce9cbc6683a.png

    (307771051)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 09:51:55

    |

    只看该作者

    break 或者return

    74_avatar_middle.jpg

    (307769577)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 10:16:29

    |

    只看该作者

    你要跳出循环 为什么还要进入while(1)?

    既然需要跳出循环 肯定有满足的条件

    if(条件满足)

    {

    break;

    }

    c4d68bbeaa26c3d446d1a2e260114e0c.png

    (307766988)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 10:59:38

    |

    只看该作者

    对于下面这种格式的主函数

    int main()

    {

    xxx;

    xxx;

    ```

    ```

    while(1)

    {

    xx;

    ```

    if(x)

    {

    switch(x)

    case x1:

    xx;

    break;

    case x2:

    xx;

    break;

    }

    xx;

    }

    else if(x)

    {

    xx;

    return 0;

    }

    else

    {

    xx;

    break;

    }

    }

    return 0;

    }

    一直对break、return有点疑惑(C语言没学好哈),借这个机会小弟在这提一下自己的理解,大家看看我对break、return的理解有没有问题:

    对于switch里的break是跳出switch的执行,然后执行switch后的xx语句;else if里返回return 0,而int main接收到返回值后,整个main函数就立即执行结束(如果main函数改为void main,而else if里return 0改为return,那么执行到return后,是返回到main的第一条语句处开始执行,区别:一个是结束main,一个是main函数从头开始执行);而else里的执行到break后是跳出while(1)循环,然后从main函数的第一条语句开始执行。

    ca3d860cefc4d7e6ebfabdb17bf75357.png

    (307762736)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 12:10:30

    |

    只看该作者

    回复【楼主位】li0709 清水潇湘

    -----------------------------------------------------------------------

    我也遇到过这种问题。

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 15:38:26

    |

    只看该作者

    回复【25楼】xiaoking 蒋杰

    -----------------------------------------------------------------------

    if (条件满足,需要跳出while循环)

    {

    flag = false;

    continue;

    }

    这样就可以不用写得那么别扭了。

    而且你在25楼那句flag = false;没有加{ },程序编译时不会报错吗?

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-17 17:20:40

    |

    只看该作者

    回复【楼主位】li0709 清水潇湘

    -----------------------------------------------------------------------

    谢谢楼主有用啊

    27b0d63c759f6d63ac764e80583e22dc.png

    (307674771)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 12:36:35

    |

    只看该作者

    少用goto不等于就一定不能用goto

    精华汤圆VIP

    {*}

    417ed852d27e8c159716eac4e3779f56.gif

    2e55b1403c1747d1e1ab61dc69fdc31f.png

    (307673586)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 12:56:20

    |

    只看该作者

    有goto用为什么不用goto。

    书上是说要少用goto。。不过我不明白为什么要少用。该用的时候就用么。。。

    这样用着不是挺好的。。

    d1b9a4a3a0b6fb1911ea2a444c194bce.png

    (307668820)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 14:15:46

    |

    只看该作者

    没错误,不用goto

    有错误,就用goto

    楼主的问题,为什么一定要 while(1) ?

    volatile int flag;

    flag = 1;

    while (flag)

    {

    }

    然后在中断里面可以将 flag 置0 就能退出了。

    682d629e9a071d9cbf37affe12e2764c.png

    (307661103)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 16:24:23

    |

    只看该作者

    我觉得goto语句很好多~~~

    73101dee8f1a4fd065c539c08d2c9bdf.png

    (307660897)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 16:27:49

    |

    只看该作者

    goto就失去了C语言的精髓。。。

    d0a6306c0ce8324ba47c2e4503a4261c.png

    (307660283)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 16:38:03

    |

    只看该作者

    goto不是不能用,只不过要谨慎使用。

    我个人认为有两种情况你可以放心的用goto:

    一是程序很简单,代码很少 结构也一目了然, 你放心用

    二是你本人是高手,那你当然可以放心用。

    83ce3ea77387579801bba450dd75b32b.png

    (307641539)

    出0入0汤圆

    3ed6c70162101cdc4cfc0ceaf175c8cd.png

    楼主|

    发表于 2011-8-18 21:50:27

    |

    只看该作者

    回复【36楼】Etual

    没错误,不用goto

    有错误,就用goto

    楼主的问题,为什么一定要 while(1) ?

    volatile int flag;

    flag = 1;

    while (flag)

    {

    }

    然后在中断里面可以将 flag 置0 就能退出了。

    -----------------------------------------------------------------------

    用while(1)的原因是想一直采集AD转换后的信号 可以做到实时操作 然后显示到液晶上面

    这个题其实就是做个心电仪 先用硬件放大心电信号 再用软件 通过键盘操作类似菜单 最后在液晶上实时显示心电脉冲

    其实我的思路很简单 以键盘为主题 (4*4的键盘)

    通过键值 使用switch case语句

    这样就可以做一个类似菜单的东西 case里面采集AD状态值 扫描打点画线 最后驱动液晶显示

    算是个多功能的玩意 以后想能显示时间 测量信号频率相位之类的

    47e6579a7764ac866e9519405c24ac53.png

    (307641153)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 21:56:53

    |

    只看该作者

    mark

    当前离线

    精华汤圆中级会员

    {*}

    417ed852d27e8c159716eac4e3779f56.gif

    4cdd4cf041bda354032274ffd7f51e00.png

    (307640302)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2011-8-18 22:11:04

    |

    只看该作者

    回复【楼主位】li0709 清水潇湘

    刚想再switch语句中的case选择下一种情况,可是出现无法跳出去了 是因为加了个while语句

    switch(w)

    {

    case 0 :

    { showstring(20,20,"egc",0,255);

    break;

    }

    case 1 :

    { lcd_clear(255,0);   //清屏

    showstring(2,2, "start",0xe0,255);

    delay(15);

    while(1)

    {

    ad_value=adc_getconversionvalue(adc1);

    value=ad_value*3.3/4096.0;

    ........}

    break;

    ......

    -----------------------------------------------------------------------

    while(1)

    {

    ad_value=adc_getconversionvalue(adc1);

    value=ad_value*3.3/4096.0;

    ........}

    放到一个新建函数里,设一个条件 条件成立用return 可跳出while(1)。

    83ce3ea77387579801bba450dd75b32b.png

    (307639256)

    出0入0汤圆

    3ed6c70162101cdc4cfc0ceaf175c8cd.png

    楼主|

    发表于 2011-8-18 22:28:30

    |

    只看该作者

    回复【42楼】Asch 阿希

    -----------------------------------------------------------------------

    恩 我当时想过用函数调用 直接把采集打点函数声明定义

    然后直接引用 貌似还没有成功

    程序功底不够啊 呵呵

    精华汤圆VIP

    {*}

    417ed852d27e8c159716eac4e3779f56.gif

    4e061c81d1b1deb4dcc905bb0489ba4b.png

    (285998901)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2012-4-25 09:41:05

    |

    只看该作者

    Excellence 发表于 2011-8-17 09:15 thread-4968929-1-1.html

    如果是在MAIN中,那么一个WHILE(1)和一个SWITCH就可以解决95%的事情。

    其他都是跳转条件。 ...

    同感......

    be07ab477272ad8e928134210fb94435.png

    (285994232)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2012-4-25 10:58:54

    |

    只看该作者

    最好通过函数调用跳出

    4e3a061a6cee689711774664b8e32641.png

    发表于 2012-4-25 11:18:38

    |

    只看该作者

    UIP协议 里面的uip_process函数大量采用goto  。 代码确实很简洁!

    6f435e1f3c6aef0ccf11e749c0867ffc.png

    (285990540)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2012-4-25 12:00:26

    |

    只看该作者

    在while(1)中判断条件+return

    70bafb9fee7e6fc32742e983ae2c4f1d.png

    (285989072)

    出0入0汤圆

    4e3a061a6cee689711774664b8e32641.png

    发表于 2012-4-25 12:24:54

    |

    只看该作者

    加break或者return

    展开全文
  • 一、while和do-while的简介  1). while语句  语法:  while(表达式){  循环体;  } 循环过程:  1.... 2.执行循环体,执行完毕,跳转到1  3.跳出循环 2). do-while语句 ... do-while至少能执行1
  • #includemain(){chara;scanf_s("%c",&a);while(a!...}运行结果是循环能停止,但是出来,不知道为什么。解决方案10不要使用while(条件)更不要使用while(组合条件)要使用while(1){if(条件1)br...

    #include

    main(){

    char a;

    scanf_s("%c", &a);

    while (a!= "@")

    {

    scanf_s("%c", &a);

    printf("kek ");

    }

    printf("oo ");

    }

    运行结果是循环能停止,但是跳不出来,不知道为什么。

    解决方案

    10

    不要使用

    while (条件)

    更不要使用

    while (组合条件)

    要使用

    while (1) {

    if (条件1) break;

    //...

    if (条件2) continue;

    //...

    if (条件3) return;

    //...

    }

    原因是前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。

    典型如:

    下面两段的语义都是当文件未结束时读字符

    while (!feof(f)) {

    a=fgetc(f);

    //...

    b=fgetc(f);//可能此时已经feof了!

    //...

    }

    而这样写就没有问题:

    while (1) {

    a=fgetc(f);

    if (feof(f)) break;

    //...

    b=fgetc(f);

    if (feof(f)) break;

    //...

    }

    相似的例子还可以举很多。

    10

    printf里面的%和变量的一一对应关系

    scanf里面的%和变量以及变量前加不加&的一一对应关系

    是C代码中非常容易出错的地方,而且通常编译还不出错。

    所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

    在每个最后不带\n的printf后面加fflush(stdout);

    在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);

    另外请检查scanf的返回值。

    //请今后要用

    char c;

    scanf("%c",&c);

    //时,都改为

    char s[2];

    char c;

    scanf("%1s",s);

    c=s[0];

    10

    scanf_s要指定每个对应“c”、“s”以及传说中的“[”格式的缓冲区的大小。

    char c;

    scanf_s("%c", &c, 1); // 思考题:为什么不用sizeof?

    引用:

    Quote: 引用:

    //请今后要用

    char c;

    scanf("%c",&c);

    //时,都改为

    char s[2];

    char c;

    scanf("%1s",s);

    c=s[0];

    诶,这段代码没看懂,为什么啊?

    本意是为了“吃”掉换行,和在之后加fflush(stdin)的做法相似(但fflush“吃”得更多)。

    然而这“都”字散发着浓郁的经验主义(教条主义)的气息。

    10

    引用:

    是原因是sizeof返回的是字节大小,所以不行?(一本正经的胡说八道)本人也不知道

    这个系列要的“缓冲区大小”指的是“能容纳的字符个数”而不是“字节个数”。

    窄字符版本要的是char的个数,宽字符版本要的是wchar_t的个数。

    所以对于数组缓冲区(buf),直接sizeof(buf)是错误的;sizeof(buf)/sizeof(buf[0])、_countof(buf)之类才是正确的。

    而对于单个字符的缓冲区,1个char c的大小就是1,1个wchar_t c的大小也是1;sizeof(c)一则多余,二则对于后者是错误的。

    CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这个while循环终止了却跳不出来为什么!

    展开全文
  • 怎么跳出while循环

    千次阅读 2020-12-05 23:56:56
    展开全部while 是一个循环体,退出循环体的方法有:1、循环体条件 不成立,如:while( a>0); 当32313133353236313431303231363533e59b9ee7ad...2、在循环体内使用无条件跳出语句(break),如 while(1){if(b...

    展开全部

    while 是一个循环体,退出循环体的方法有:

    1、循环体条件 不成立,如:while( a>0); 当32313133353236313431303231363533e59b9ee7ad9431333431373330 a≤0 的时候,条件 a>0不成立,while 循环结束,退出 while 循环。

    2、在循环体内使用无条件跳出语句(break),如 while(1){if(b>5)break;}当 b>5 的时候,程序执行 break ,跳出 while 循环体,循环体被结束。

    3、在循环体内使用 函数返回 语句(return),如 while(1){if(c>8) return (XXX);},当 c>8的时候,程序执行 return,退出函数返回到上级函数。其中返回值 XXX 需要根据 函数类型进行返回。

    如 int 型函数 int fun(),XXX 应为 int型,空返回值函数 void fun(),XXX 可以省略。

    扩展资料:

    while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。while语句的一般表达式为:while(表达式){循环体}。

    while语法

    Pascal

    while do

    意为当条件符合时,接着做下面的语句;不符合时,退出循环。

    C

    do while();

    while() ;

    C++

    while() ;

    do while();

    Java

    while() {}

    do {} while();

    二者的区别是do-while最少会被执行一次。

    循环中可以使用continue结束当前循环,回到循环开始处开始下一次循环。也可以用break跳出整个循环。

    展开全文
  • 在 PHP 中,提供了下列循环语句:while- 只要指定的条件成立,则循环执行代码块do...while- 首先执行一次代码块,然后在指定的条件成立时重复这个循环for- 循环执行代码块指定的次数foreach-...
  • python如何跳出while循环

    千次阅读 2020-12-04 10:44:27
    先来看代码person={'name':'Helen','password':'123'}while True:nm=input('请输入用户名')psw=input('请输入密码')if nm==person['name'] and psw==person['password']:cmd=input('请输入指令:')while cmd!...
  • 跳出while循环得三种方法

    千次阅读 2021-04-22 17:50:34
    目录1while循环简介2:指定条件的三种形式2.1:直接使用条件表达式式来作为指定条件的判断2.2:使用变量来作为指定条件的判断2.3:使用标志的方法作为指定条件的判断 1while循环简介 当条件没有满足指定条件的...
  • while循环跳出问题

    2021-01-21 19:01:06
    while True: print('无限循环') 在这里不加break,就是无限循环的,然后再添加另外一个不相关的代码 sandwich_old = ['鸡排牛腩三明治', '金枪鱼三明治', '蛋黄三明治'] sandwich_new = [] # while sandwich_new:...
  • while(xunhuan_8); } if(er=='B') { do{ system("cls"); _3Bmenu(); char ty; scanf(" %c",&ty); if(ty=='A') { system("cls"); ...
  • python和其他语言一样也有break和continue,分别用来表示跳出循环和继续循环。 #!/usr/bin/python # Simple while loop a = 0 while a < 15: print a, # 在print a后面加,不换行 if a == 10: print "made it...
  • while(true)何时跳出循环?

    千次阅读 2021-02-13 01:00:33
    while(true)是不会跳出循环的。在while中括号里为一个条件值,只要当条件为真的时分,会执行这条语句,直到条件为false的时分,则会跳出该循环语句。而在这里括号里的值为true,也就意味着会不断执行该条语句。除了...
  • while循环跳出返回值技巧

    千次阅读 2018-12-05 15:26:42
    while()循环中,假设使用错误机制时,针对不同的错误类型,返回不同的值时,需要注意。 可以在不同错误后,置位错误标志位,置位循环标志位,使之跳出循环,根据不同情况的错误标志位数值,跳出循环后返回不同的...
  • 在C#中while循环是我们经常会用到的一种循环语句,while循环特点是直到条件为零时才跳出循环,当然中间可以利用其它函数直接跳出,对于while的具体用法有必要做一个较为详尽的分析。 先来说Foreach和For的区别,...
  • 跳出while循环的三种方法

    万次阅读 2020-07-29 22:49:01
    文章目录跳出while循环的三种方法(以Python代码为例)方法1: break语句方法2: 标志位方法3: 判断不结束 在《Python编程从入门到实践》书中有这么一道习题:比萨配料: 编写一个程序,提示用户输入一系列的比萨配料,...
  • xp系统中利用dev-cpp进行编程,语句while(cin>>str),str是个string类型,在一行中输入几个string,末位加个ctrl+z,输入没有结束,除非出入换行后,再输入ctrl+z才能跳出输入。一直不明白未什么,解释请看下。 输入...
  • while循环是在Python中的循环结构之一。 while循环继续,直到表达式变为假。表达的是一个逻辑表达式,必须返回一个true或false值,本文章向码农介绍Python while 循环使用方法,需要的朋友可以看一下本文章。 一个...
  • 这个要分情况的:1:本身条件就有出口,这样的话,可以自然退出,也可以认为退出2:如果本身条件永远不可能满足,例如:while(1)像这种的话想要退出的话就必须人为干涉,例如intnum= 0;while(1){num++; if(num>...
  • mysql while,loop,repeat循环,符合条件跳出循环_MySQL1while循环DELIMITER $$DROP PROCEDURE IF EXISTS `sp_test_while`$$CREATE PROCEDURE `sp_test_while`(IN p_number INT, #要循环的次数IN p_startid INT #...
  • 1while循环DELIMITER$$DROPPROCEDUREIFEXISTS`sp_test_while`$$CREATEPROCEDURE`sp_test_while`(INp_numberINT,#要循环的次数INp_startidINT#循环的其实值)BEGINDECLAREv_valINTDEFAULT0;SETv_val=p_start...
  • while(1){}和while(1);

    千次阅读 多人点赞 2020-03-21 16:58:12
    阅读目录while(1);while(1){ 代码 }参考资料 单片机中while(1)有两种用途, while(1); 意义:这是一个死循环,代码不再向下执行。 用途: 一般在调试代码时,为了检测一部分代码是否OK,防止后面的代码干扰执行...
  • 满足判断语句时进入循环,进入循环后,当判断语句不满足时,跳出循环。 基本形式: While 判断语句: 执行语句 实例: 代码: #coding=utf-8 print("打卡开始") count = 1 #定义一个整数,表示读取该用户的次数 ...
  • 今天想到一个while循环等待,超时跳出的应用,比如等待超时信号,超时重发等,用QTimer实现,做一记录: mTimeout = false; validSignal = false; QTimer *timer = new QTimer(this); timer->setInterval...
  • 一、for循环需求:计算1-100所有数字的和[root@linux-.../bin/bashfor i in seq 1 100doecho $i //先把100个数字打印出来done[root@linux-01 shell]# sh for1.sh //执行脚本打印出100个数字继续修改脚本:[root@linu...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 276,845
精华内容 110,738
关键字:

while(1)怎么跳出