C++菜鸟常见错误整理(第八天)
来源:互联网 发布:安装解压版mysql步骤 编辑:程序博客网 时间:2024/06/04 18:28
本人目前还是学生,能力有限,有不足或者错误的地方欢迎大家指正,谢谢大家!
1、if语句,垂悬else
看如下代码
if (minVal <= ivec[i])
if (minVal == ivec[i])
++occurs;
else {
minVal = ivec[i];
occurs = 1;
}
if 语句都普通存在着潜在的二义性。这种情况往往称为悬垂 else 问题,产生于一个语句包含的 if 子句多于
else 子句时:对于每一个 else,究竟它们归属哪个 if 语句?
在上述的代码中,缩进的用法表明 else 应该与外层的 if 子句匹配。然而,C++中悬垂 else 问题带来的
二义性,通过将 else 匹配给最后出现的尚未匹配的if 子句来解决。
有些编程风格建议总是在 if 后面使用花括号。
2、switch case语句case的省略问题
假设要统计五个元音在文本里分别出现的次数
直接使用 switch 语句解决上述问题:
char ch;
int aCnt = 0, eCnt = 0, iCnt = 0,oCnt = 0, uCnt = 0;
while (cin >> ch) {
switch (ch) {
case 'a': ++aCnt; break;
case 'e': ++eCnt; break;
case 'i': ++iCnt; break;
case 'o': ++oCnt; break;
case 'u': ++uCnt; break; }
}
省略case,上述代码可以这么写
switch (ch) {
case 'a': case 'e': case 'i': case 'o': case 'u':
++vowelCnt; break; }
比较少见的用法是,为了执行某个 case 的代码后继续执行下一个 case 的代码,故意省略 break 语句。
故意省略 case 后面的 break 语句是很罕见的,因此应该提供一些注释说明其逻辑。
switch(int ival = get_response())
在这个例子中,ival 被初始化为 get_response 函数的调用结果,其值将要与每个 case 标号作比较。
变量 ival 始终存在于整个 switch 语句中,在 switch结构外面该变量就不再有效了。
3、default 标号
default 标号提供了相当于 else 子句的功能。如果所有的 case 标号与switch 表达式的值都不匹配,并且
default 标号存在,则执行 default 标号后面的语句。
例如,在上述例子中添加一个计数器 otherCnt 统计读入多少个辅音字母,为 switch 结构增加 default 标号,
其标志的分支实现 otherCnt 的自增:
switch (ch) {
case 'a': ++aCnt; break;
default: ++otherCnt; break; }
在这个码中,如果 ch 不是元音,程序流程将执行 default 标号的相关语句,使 otherCnt 的值加 1。哪怕没有
语句要在 default 标号下执行,定义default 标号仍然是有用的。定义 default 标号是为了告诉它的读者,表明这种
情况已经考虑到了,只是没什么要执行的。
一个标号不能独立存在,它必须位于语句之前。如果 switch 结构以 default 标号结束,而且 default 分支不需要
完成任何任务,那么该标号后面必须有一个空语句。
今天就到这里,有不足的地方还请指正,谢谢大家!
- C++菜鸟常见错误整理(第八天)
- C++菜鸟常见错误整理(第一天)
- C++菜鸟常见错误整理(第三天)
- C++菜鸟常见错误整理(第五天)
- C++菜鸟常见错误整理(第九天)
- C++菜鸟常见错误整理(第十四天)
- C++菜鸟常见错误整理(第七天)
- C++菜鸟常见错误整理(第二天)
- C++菜鸟常见错误整理(第四天)
- C++菜鸟常见错误整理(第六天)
- C++菜鸟常见错误整理(第十天)
- C++菜鸟常见错误整理(第十一天)
- C++菜鸟常见错误整理(第十二天)
- C++菜鸟常见错误整理(第十三天)
- C语言第八天
- C第八天
- c/c++第八天
- 学习C的第八天
- android 下的图片内存溢出处理
- Windows Touch
- 第十次上次实验
- HDU 2153
- android 开源项目(二)可以左右拖动删除、调换位置的的listview的 item的实现(drag-sort-listview)
- C++菜鸟常见错误整理(第八天)
- magento给order的incrementID加前缀
- 慧都UPMS通用用户权限系统——如何实现用户跨系统
- 约瑟夫环的递归实现
- android 下的广播
- Mybatis 在CS程序中的应用
- js new关键字
- mysql命令行操作
- 微软揭示了WindowsServer 2012 R2,SystemCenter 2012 R2,SQLServer 2014