关于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. }      
 
喏,我的改版方案就这样,大家看看,是不是成功把do{}while()改成while(){}了?
欢迎继续讨论啊。
=======================================================
肖舸
QQ:712123
Email:tonyxiaohome@hotmail.com


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值