关于do{}while()的代码讨论

简介:
呵呵,自从前一篇博文《我为什么不用do{}while() 》出来以后,果不其然,有网友开始PK,访问量是越来越高。呵呵,意料之外啊。
 嗯,这中间说啥的都有。
不过,有位tq朋友(http://hi.csdn.net/WvW),应该说比较认真的,由于我文中说过,有谁有do{}while()无法改写为while的,可以发给我,我试着帮忙看看,看能不能改写。因为我这么多年,确实没有见过哪个代码只能用do{}while()无法用为while(){}的。
tq朋友就真的找段代码来,让我帮忙翻译成while()版。
 这位tq朋友的问题是从CSDN的短消息发过来的,问题如下:
 
Code:
  1. 既然你回复了, 请你写出这个伪代码, 用你的while.    
  2. 微软电源管理 PowerEnumerate(NULL,  要枚举类型, 子组, 子组设置, 索引号) 函数,    
  3. 大致意思是, 你提供要枚举的内容<子组> 和 子组的<设置项目>, 都靠这个函数去枚举,    
  4. 看起来就是个 2级目录结构.    
  5. NO_SUBGROUP_GUID   
  6.         1.1 设置1    
  7.         1.2 设置2    
  8. 1.子组1    
  9.         1.1 设置1    
  10.         1.2 设置2    
  11. 2.子组    
  12.     2.1设置1    
  13.         2.2设置2    
  14. 现在有个"特殊设置集合", 他的子组名是: NO_SUBGROUP_GUID. 这个子组无法通过 PowerEnumerate 枚举到这个子组.    
  15. 但是你指定 PowerEnumerate 的子组参数 为 NO_SUBGROUP_GUID, 你却可以枚举到他的设置集合.    
  16. /// 请你把下列伪代码用 while() {} 表示吧.   
  17. void printf_power_sheme()   
  18. {   
  19.         GUID uuid_subgroup= NO_SUBGROUP_GUID;    
  20.         int nIndex= -1;    
  21.         do    
  22.         {    
  23.                 /// 输出子组的名称 和 一些参数    
  24.         /// ... 省略20行代码   
  25.         /// 枚举 <当前子组> 的第 nIndex_settings个 设置项目.    
  26.                 int nIndex_settings=0;    
  27.                 while(PowerEnumerate(NULL, 枚举子组的设置, 子组uuid, &子组的设置uuid, nIndex_settings) == ERROR_SUCCESS)    
  28.                 {    
  29.                         // 输出子组的设置项目名称. 和一些参数    
  30.             /// ... 省略20行代码   
  31.             nIndex_settings++   
  32.                 }   
  33.                 nIndex++;    
  34.         }   
  35.         while (PowerEnumerate(, 读取子组, ...., nIndex) == ERROR_SUCCESS)    
  36.         //枚举第nIndex个子组.    
  37.         /// 你试试用你的 while () 结构写出来试试.   
  38. }  
嗯,这是个问题,看起来结构蛮复杂的。我就试着给看看。嗯,我的修改方案如下:
Code:
  1. void TONY_printf_power_sheme()       
  2. {       
  3.     GUID uuid_subgroup= NO_SUBGROUP_GUID;        
  4.     int nIndex= -1;        
  5.     //do                //by:Tony:注意,do没用了   
  6.     while(1)            //by:Tony:注意:改成while了。       
  7.     {        
  8.         /// 输出子组的名称 和 一些参数        
  9.         /// ... 省略20行代码       
  10.         /// 枚举 <当前子组> 的第 nIndex_settings个 设置项目.        
  11.         int nIndex_settings=0;        
  12.         while(PowerEnumerate(NULL, 枚举子组的设置, 子组uuid, &子组的设置uuid, nIndex_settings) == ERROR_SUCCESS)        
  13.         {        
  14.             // 输出子组的设置项目名称. 和一些参数        
  15.             /// ... 省略20行代码       
  16.             nIndex_settings++       
  17.         }       
  18.         nIndex++;        
  19.         //by:Tony:注意:在这个点做判断跳出,没错吧?       
  20.         //by:Tony:请注意,我判断语句取反了,原来是判断==继续,现在是判断!=跳出       
  21.         if(PowerEnumerate(, 读取子组, ...., nIndex) != ERROR_SUCCESS) break;       
  22.     }       
  23.     //by:Tony:注意,这里被隐掉了   
  24.     //while (PowerEnumerate(, 读取子组, ...., nIndex) == ERROR_SUCCESS) //枚举第nIndex个子组.     /// 你试试用你的 while () 结构写出来试试.       
  25.     /// by:Tony:我写出来了,呵呵。       
  26. }      
  27. 本文转自 tonyxiaohome

  28.  51CTO博客,原文链接:http://blog.51cto.com/tonyxiaohome/316810 ,如需转载请自行联系原作者

相关文章
|
JavaScript
热点面试题:JS 中 call, apply, bind 概念、用法、区别及实现?
热点面试题:JS 中 call, apply, bind 概念、用法、区别及实现?
|
前端开发
前端学习案例1-call,apply的重用
前端学习案例1-call,apply的重用
69 0
前端学习案例1-call,apply的重用
|
前端开发
前端学习案例1-empty和undefined区别
前端学习案例1-empty和undefined区别
80 0
前端学习案例1-empty和undefined区别
|
存储 JavaScript Scala
从map函数引发的讨论
从map函数引发的讨论
从map函数引发的讨论
ts重点学习125-装饰器的小例子
ts重点学习125-装饰器的小例子
44 0
ts重点学习125-装饰器的小例子
ts重点学习126-装饰器的小例子笔记
ts重点学习126-装饰器的小例子笔记
78 0
ts重点学习50-函数得参数得处理方式笔记
ts重点学习50-函数得参数得处理方式笔记
89 0
ts重点学习119-方法的装饰器笔记
ts重点学习119-方法的装饰器笔记
61 0
ts重点学习121-访问器的装饰器笔记
ts重点学习121-访问器的装饰器笔记
77 0
ts重点学习124-参数的装饰器笔记
ts重点学习124-参数的装饰器笔记
59 0