精华内容
下载资源
问答
  • )、当某些语句需要执行很多次时,就循环结构。  while 和for可以进行互换。   区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。   break: 作用于...

    1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。

        但是建议使用switch,效率相对较高。

    switch(变量){

       case 值:要执行的语句;break;

       …

       default:要执行的语句;

    }

     工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了

               就执行哪个case后面的语句,如果没有相同的则执行default后面的语句;

     细节:1):break是可以省略的,如果省略了就一直执行到遇到break为止;

           2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;

           3):default可以写在switch结构中的任意位置;如果将default语句放在了第一行,则不管expression与case中的value是否匹配,程序会从default开始执行直到第一个break出现。

        2)、当判断数据范围,获取判断运算结果boolean类型时,需要使用if。

        3)、当某些语句需要执行很多次时,就用循环结构。

        while和for可以进行互换。

        区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。

     

    break:作用于switch ,和循环语句,用于跳出,或者称为结束。

    break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号

     

    continue:只作用于循环结构,继续循环用的。

    作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。


    转载于:https://my.oschina.net/u/2441327/blog/666292

    展开全文
  • while语句 浅谈对while语句的用法...特点:大家应该都知道for循环和while循环都可以用作循环来使用,你们什么时候用哪个会更好呢?我认为最好是根据循环次数来决定。while循环可以用于循环次数不确定的,for循环用于

    while语句

    浅谈对while语句的用法

    while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。
    语法结构:

    变量初始化语句1while(条件表达式语句2{       
     循环体语句3;       
     变量变更语句4}

    特点:大家应该都知道for循环和while循环都可以用作循环来使用,你们什么时候用哪个会更好呢?我认为最好是根据循环次数来决定。while循环可以用于循环次数不确定的,for循环用于循环次数确定的。

    案例

    //输出10个Hello World
    int i=0;
    while (i<10){
        System.out.println("Hello World");
        i++;
    }

    do while

    当然除了上面的用法以外,还有一种while的变形,那就是do while了
    语法:

    do {需执行的代码 } while (<条件>);

    这个语法有个很大的特点就是不论条件是true还是false都会先执行一遍do里面的代码。
    案例1

    //do whlie输出10个hello world
    int i = 1;
    do {
        System.out.println("hello world");
        i++;
    }while (i<=10);

    好,现在我们再来看看案例2,仔细与案例1对比一下
    案例2

    //do whlie输出10个hello world
    int i = 1;
    do {
        System.out.println("hello world");
        i++;
    }while (i>10);

    很明显案例2中i>10的条件是false的,但是我们的代码执行的时候还是会输出一次hello world,因为do while是先执行代码再进行条件判断的。

    今天的分享先到这,喜欢的小伙伴可以点点关注。

    展开全文
  • 在linux内核中常常会看到do{} while(0)这样的语句do{} while(0)内的语句只能执行一次,那么加不加do{} while(0)有什么区别呢?或者说加了do{} while(0)语句什么作用呢? 1.帮助定义复杂的宏以避免错误 举例来...

    在linux内核中常常会看到do{} while(0)这样的语句,do{} while(0)内的语句只能执行一次,那么加不加do{} while(0)有什么区别呢?或者说加了do{} while(0)语句有什么作用呢?

    1.帮助定义复杂的宏以避免错误

    举例来说,假设你需要定义这样一个宏:

    #define DOSOMETHING() foo1(); foo2();

    这个宏的本意是,当调用DOSOMETHING()时,函数foo1()和foo2()都会被调用。但是如果你在调用的时候这么写:

    if(a>0)
        DOSOMETHING();
    

    因为宏在预处理的时候会直接被展开,你实际上写的代码是这个样子的:

    if(a>0)
        foo1();
        foo2();
    

    这就出现了问题,因为无论a是否大于0,foo2()都会被执行,导致程序出错。
    那么仅仅使用{}将foo1()和foo2()包起来行么?比如:

    #define DOSOMETHING() { foo1(); foo2(); }

    我们在写代码的时候都习惯在语句右面加上分号,如果在宏中使用{},代码编译展开后宏就相当于这样写了:“{...};”,展开后就是这个样子:

    if(a>0)
    {
        foo1();
        foo2();
    };
    

    很明显,这是一个语法错误(大括号后多了一个分号)。
    现在的编译器会自动检测自动忽略分号,不会报错,但是我们还是希望能跑在老的编译器上。

    在没有do/while(0)的情况下,在所有可能情况下,期望我们写的多语句宏总能有正确的表现几乎是不可能的。
    如果我们使用do{...}while(0)来定义宏,即:

    #define DOSOMETHING() \
            do{ \
              foo1();\
              foo2();\
            }while(0)\
    

    这样,宏被展开后,上面的调用语句才会保留初始的语义。do能确保大括号里的逻辑能被执行,而while(0)能确保该逻辑只被执行一次,就像没有循环语句一样。

    总结:在Linux和其它代码库里的,很多宏实现都使用do/while(0)来包裹他们的逻辑,这样不管在调用代码中怎么使用分号和大括号,而该宏总能确保其行为是一致的。
    cocos2d-x中大量使用了这种宏定义:

    #define CC_SAFE_DELETE(p) do { if(p) { delete (p); (p) = 0; } } while(0)

    2. 避免使用goto控制程序流

    在一些函数中,我们可能需要在return语句之前做一些清理工作,比如释放在函数开始处由malloc申请的内存空间,使用goto总是一种简单的方法:

    int foo()
    {
        somestruct *ptr = malloc(...);
    
        dosomething...;
        if(error)
            goto END;
        dosomething...;
        if(error)
            goto END;
        dosomething...;
    END:
        free(ptr);
        return 0;
    }
    

    但由于goto不符合软件工程的结构化,而且有可能使得代码难懂,所以很多人都不倡导使用,这个时候我们可以使用do{...}while(0)来做同样的事情:

    int foo()
    {
        somestruct *ptr = malloc(...);
        do
        {
            dosomething...;
            if(error)
                break;
            dosomething...;
            if(error)
                break;
            dosomething...;
        }
        while(0);
    
        free(ptr);
        return 0;
    }
    

    这里将函数主体部分使用do{...}while(0)包含起来,使用break来代替goto,后续的清理工作在while之后,现在既能达到同样的效果,而且代码的可读性、可维护性都要比上面的goto代码好的多了。

    我经常使用这个种技能在Lua里,Lua不支持do{...}while(0)语法,但是Lua有一种类似的语法repeat...until,伪代码如下:

    repeat
      dosomething...
      if error then
        break;
      end
      dosomething...;
      if error then
        break;
      end      
      dosomething...;
    until (1);
    print("break repeat");
    

    这样和do{...}while(0)一样,也保证了只执行一次,可以用break调出循环。

    3. 避免由宏引起的警告

    内核中由于不同架构的限制,很多时候会用到空宏,。在编译的时候,这些空宏会给出warning,为了避免这样的warning,我们可以使用do{...}while(0)来定义空宏:

    #define EMPTYMICRO do{}while(0)

    这种情况不太常见,因为有很多编译器,已经支持空宏。

    4. 定义单一的函数块来完成复杂的操作

    如果你有一个复杂的函数,变量很多,而且你不想要增加新的函数,可以使用do{...}while(0),将你的代码写在里面,里面可以定义变量而不用考虑变量名会同函数之前或者之后的重复。
    但是我不建议这样做,尽量声明不同的变量名,以便于后续开发人员阅读。

    int key;
    string value;
    int func()
    {
        int key = GetKey();
        string value = GetValue();
        dosomething for key,value;
        do{
            int key;string value;
            dosomething for this key,value;
        }while(0);    
    }

     

     

    from:

    https://www.jianshu.com/p/99efda8dfec9

    展开全文
  • 什么用do-while(0)?

    2019-10-07 22:39:17
    今天读代码时候,看到这样的代码。。 #define MG_SET_PTRPTR(_...1、对于带有if 语句的宏,无论是内核还是开源代码,都是用到了do while(0)技巧。问题来了,为什么要这样搞呢? 很简单,假设存在 if XXX { i...

    今天读代码时候,看到这样的代码。。

    #define MG_SET_PTRPTR(_ptr, _v) \
    do { \
    if (_ptr) *(_ptr) = _v; \
    } while (0)
    

     

    1、对于带有if 语句的宏,无论是内核还是开源代码,都是用到了do while(0)技巧。问题来了,为什么要这样搞呢?
    很简单,假设存在

    if XXX
    {
    if (_ptr) *(_ptr) = _v;
    }	
    else
    {
    ....
    }
    

     


    如果这里没有do while,那么是不是后面的else语句匹配出错了呢????
    导致的效果是:编译能通过,但是执行出错。

     

    2、还会存在一种极度恶心的情况。
    假设存在宏展开后为:

    a = a + 1; b = a;
    

    那么,有: 

    if xxxx
    a = a + 1; b = a;
    else
    XXXX
    

     

    那么会导致编译通不过。

     

    所以内核也好,开源软件也好,为了解决宏带来的问题,不得不引入这种do while(0) 这样的代码。。。

    转载于:https://www.cnblogs.com/ccXgc/p/9046963.html

    展开全文
  • for循环语句,双从for嵌套:/*for(初始化表达式;循环条件表达式;循环后的操作表达式){ 执行语句; } *//*1,变量有自己的作用域。对于for来讲:如果将用于控制循环的增量... 总结: 什么时候使用循环结构? 当要对某...
  • do...while{0}有什么好处

    2017-09-05 09:44:14
    当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于do while循环中,则能break达到这个目的。 do {  我执行.  我执行..  我再执行…  if (有什么条件满足了我)  {  呀,我想跳到另外一段代码了...
  • 1、空语句在编译的时候会出现警告,所以有必要#define FOO do{ } while(0) 2、给定一个基本块,可以在里面定义局部变量 3、为了能够在条件语句中使用复杂的宏定义。例如下面这段代码: #define FOO(x) \
  • 跳转语句 break、continue

    热门讨论 2016-11-06 14:16:57
    迄今为止,已经学了3中循环语句,分别为 for语句、while语句dowhile语句什么时候适合那种语句,下面进行简单介绍 一:while语句:执行事先不知道要循环多少次,并且先判断后执行的情况下使用while循环语句 ...
  • do...while(0)解析

    2017-06-10 23:37:41
    1、空语句在编译的时候会出现警告,所以有必要#define FOO do{ } while(0) 2、给定一个基本块,可以在里面定义局部变量 3、为了能够在条件语句中使用复杂的宏定义。例如下面这段代码: [cpp] ...
  • do{}while(0)的作用

    2019-12-13 15:03:03
    什么使用do{}while(0)语句? 从代码含义来看,表示执行一次do{}内的代码块,然后结束掉。看似好像没有什么用,但是该语句会把多条代码牢牢的拴在一起,不可分割。 当我们的宏定义存在两条或两条一上时,有时候...
  • 程序流程控制:  程序流程控制的结构有: ...l 这些语句什么时候用? l 1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。 l 但是建议使用switch,效率相对较高。 l swit
  • 说说 java语句

    2020-07-04 16:48:49
    这些语句什么时候用? 1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。 但是建议使用switch,效率相对较高。 switch(变量){ case 值:要执行的语句;break; … default:要执行的语句; } 工作...
  • 五、语句

    2014-06-05 22:41:00
    这些语句什么时候用? 1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。 但是建议使用switch,效率相对较高。 switch(变量){ case 值:要执行的语句;break; … default:要执行的语句; } ...
  • do{ ... } while(0)

    2013-03-28 14:24:36
     ·空语句在编译时候会出现警告,所以有必要#define FOO do { } while(0).  ·这样做是为了能够在里面定义局部变量  ·这样做是为了能够在条件语句中使用复杂的宏定义. 例如下面这段代码:  #define ...
  • 三种基本的循环语句:for语句while语句do-while语句 一循环语句 (一)for循环它的一般形式为: for<初始化<条件表过式<增量) 语句; 初始化总是一个赋值语句它用来给循环控制变量赋初值条件表达式是一个关系表达式它...
  • 循环语句结构

    2019-12-03 11:54:36
    1.如何判断什么时候用什么语句: 若循环次数一定,计数控制的循环用for循环。 若循环次数未知,条件控制的循环用while循环。 若循环次数至少执行一次用do-while循环。 2.嵌套循环的概念: 在一个循环语句中又...
  • 最近在看esp32的idf,有一些宏定义使用了do while(0)这种看起来好像没啥的代码。然后我查了一下资料,发现在linux内核代码中经常用到这个东西!...1、空语句在编译的时候会出现警告,所以有必要#defin...
  • 循环语句学习总结

    2018-12-09 14:27:42
    1.如何判断什么时候用什么语句: 若循环次数一定,计数控制的循环用for循环。 若循环次数未知,条件控制的循环用while循环。 若循环次数至少执行一次用do-while循环。 2.嵌套循环的概念: 在一个循环语句中又...
  • 语句小结

    2015-11-02 18:30:34
    If switch do while while for 这些语句什么时候用? 1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。 但是建议使用switch,效率相对较高。 switch(变量){  case 值:要执行的语句;break;  ...
  • 很多人会搞不清或者没思考过什么时候用多个if、 if else 前者会把所有的if都去判断一遍,后者只会匹配一种,匹配到合适的就不会再往下匹配了,代码应该是互斥的 2.循环语句 for 和while,可以说While是for的简化版...
  • C语言入门(九)循环语句和循环控制

    千次阅读 多人点赞 2016-07-12 10:07:42
    Turbo C 2.0提供三种基本的循环语句: for语句、while语句do-while语句。 一、循环语句 (一)、for循环 它的一般形式为: for(;;) 语句; 初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系...
  • 这些语句什么时候用?     1、当判断固定个数的值的时候,可以使用if,也可以使用switch。     但是建议使用switch,效率相对较高。   switch(变量){     case 值 : 要执行的语句 ;break;     „
  • Turbo C 2.0提供三种基本的循环语句: for语句、while语句do-while语句。 一、循环语句 (一)、for循环 它的一般形式为: for(;;) 语句; 初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一...
  • 在一场比赛中,只有弱势方才需要裁判,才寻求公正。...同时还会讲到循环语句,for,while,dowhile. 第一节:分支结构(重要) 说到分支结构,我们先说顺序结构,顺序结构就是:你开火了就下油炒菜上
  • 本次课学习到的知识点: (1)循环结构有四要素:循环初始化,循环条件,循环体,循环变量修改。 (2)for语句和while语句都是在循环前先判断条件...分不清什么时候用for语句,什么时候用while语句什么时候用do-whil...
  • c语言循环结构复习

    2019-04-19 14:53:51
    那么到底什么时候用什么样的语句呢? 1、while循环 while(表达式) 循环体语句; 从这里可以看出来,当一个题目中要求说当某一个表达式为真的时候,就一直执行下去,那么这里就用while循环,也就是不限定次数的循环,...
  • 1.本次课学习到的知识点 (1)do-while语句的用法 (2)continue语句和break语句的不同 (3)for语句能改写成while...(1)内容比较多,记忆起来比较复杂,不清楚什么时候用什么循环 (2)多看书,多练习 3....

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

while语句什么时候用do