关于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 ,如需转载请自行联系原作者

相关文章
|
开发工具 Android开发 数据安全/隐私保护
Cocos Creator Android 平台 Facebook 原生登录(一)
Cocos Creator Android 平台 Facebook 原生登录
770 0
|
Rust 安全 程序员
Rust与C++:内存管理与安全性的比较
本文将对Rust和C++两种编程语言在内存管理和安全性方面进行深入比较。我们将探讨Rust如何通过其独特的所有权系统和生命周期管理来消除内存泄漏和悬挂指针等常见问题,并对比C++在这方面的挑战。此外,我们还将讨论Rust的类型系统和编译器如何在编译时捕获许多常见的运行时错误,从而提高代码的安全性。
|
6月前
|
数据采集 存储 Web App开发
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
本教程基于Feapder框架,讲解如何构建轻量级爬虫采集豆瓣电影数据。通过配置代理IP、Cookie与User-Agent,实现企业级数据管道能力,包括动态请求与信息提取(如电影名称、导演、演员等)。适合具备Python基础及爬虫原理知识的读者,提供从环境搭建到代码实现的完整流程,并分析常见错误与解决方法,助力高效开发。
261 1
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
|
存储 运维 监控
降本 60%!小熊油耗使用阿里云 SAE 更加稳定可靠
小熊油耗在进行架构升级时,进行了广泛的市场调研,深入分析了国内多家云服务商。经过对比多种 IaaS 层云主机方案及 Serverless 产品的部署策略,他们最终选择了阿里云Serverless 应用引擎 SAE。小熊油耗认为,阿里云能给他们提供更强的安全感,安全感来自于阿里云是一个更大的平台:历史最悠久,用户最多、产品最丰富、配套工具众多、技术支持体系成熟,阿里云 SAE,不仅在稳定性上表现卓越,在细粒度的成本控制和极致的弹性能力上表现也非常出色,而且免运维,完美契合了小熊油耗作为一家细分领域小而美的公司的需求。
888 10
|
Python
Python批量复制指定名称文件的技巧
通过上述步骤和示例代码,你可以轻松实现批量复制特定名称文件的功能。这种技术不仅节省了时间,而且通过脚本自动化,提高了工作效率。
238 2
|
监控 安全 数据库
【Docker专栏】Docker容器化应用的最佳实践
【5月更文挑战第7天】本文介绍了 Docker 容器化应用的关键最佳实践,包括使用官方基础镜像、保持镜像精简、以非 root 用户运行容器、安全扫描、编写高效 Dockerfile、环境隔离、使用数据卷、选择合适网络模式、设置资源限制、使用版本标签、容器编排以及文档和自动化部署。遵循这些实践可提升效率和安全性,同时要注意随着技术发展不断更新知识。
345 10
【Docker专栏】Docker容器化应用的最佳实践
|
分布式计算 资源调度 Hadoop
Hadoop执行格式化命令
【7月更文挑战第20天】
329 1
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
542 0
uni-app+vue3 封装全局函数(详细完整的方法)
uni-app+vue3 封装全局函数(详细完整的方法)
1329 0