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