VB转学VC的switch困惑
来源:互联网 发布:app软件推广平台 编辑:程序博客网 时间:2024/05/01 23:03
刚从VB转学VC,发现但switch语句与select case 很相似,其实它们有很大的不同!
第一,select case语句case部分表达式很灵活,而switch语句中的case部分只能接受常量,所以当取值在一定范围的时候,就必须一一枚举出来。看不去不如VB灵活,其实这样的结构目的是通过构造特殊的二进制编码并利用寄存器技术提高效率,而VB中的select case语句最终还是转化为if else,所以两者的执行效率上有很大的差别。
第二,两者处理流程上的不同,select case中每个case部分执行完之后,就会跳出循环,而switch中如果没有遇到break,则会继续执行下去。
其实在C++内部,是将case部分作为标号处理的。
如下面一个switch语句:
其实是这样处理的:
这样如果i等于2,就跳到A行,输出2,然后忽略掉B行这个标号,继续向下执行。这个功能很灵活,但很多人不理解,为什么不在case标号的后面内置一个break,其实如果这样做的话,就会限制C++的灵活性!
举个例子:
计算1000元以下商品让利折扣,两百元以下让利五元,四百元以下让利十元,六百元以下让利2%,再让利十元,八百元以下让利3%,然后余额再让利2%,再让利十元,一千元以下让利5%,然后余额再让利3%,然后再次让利2%,再让利十元.
这正是利用了switch的"跨case"特性,使程序简明清晰!
完整代码:
代码在winxp,vc2005下实现
第一,select case语句case部分表达式很灵活,而switch语句中的case部分只能接受常量,所以当取值在一定范围的时候,就必须一一枚举出来。看不去不如VB灵活,其实这样的结构目的是通过构造特殊的二进制编码并利用寄存器技术提高效率,而VB中的select case语句最终还是转化为if else,所以两者的执行效率上有很大的差别。
第二,两者处理流程上的不同,select case中每个case部分执行完之后,就会跳出循环,而switch中如果没有遇到break,则会继续执行下去。
其实在C++内部,是将case部分作为标号处理的。
如下面一个switch语句:
- switch(i)
- {
- case 1:
- cout<<"1";
- case 2:
- cout<<"2";
- case 3:
- cout<<"3";
- }
其实是这样处理的:
- int _lbl = i;
- goto _lbl;
- 1:
- cout<<"1";
- 2: //A
- cout<<"2";
- 3: //B
- cout<<"3";
这样如果i等于2,就跳到A行,输出2,然后忽略掉B行这个标号,继续向下执行。这个功能很灵活,但很多人不理解,为什么不在case标号的后面内置一个break,其实如果这样做的话,就会限制C++的灵活性!
举个例子:
计算1000元以下商品让利折扣,两百元以下让利五元,四百元以下让利十元,六百元以下让利2%,再让利十元,八百元以下让利3%,然后余额再让利2%,再让利十元,一千元以下让利5%,然后余额再让利3%,然后再次让利2%,再让利十元.
- double value = 0;
- double money = 232.5;
- double b_money = money;
- switch((int)money/100)
- {
- case 9:
- case 8:
- value = money * 0.05;
- money = money - value;
- case 7:
- case 6:
- value = money * 0.03;
- money = money - value;
- case 5:
- case 4:
- value = money * 0.02;
- money = money - value;
- case 3:
- case 2:
- money -= 10;
- break;
- default:
- money -= 5;
- }
- value = b_money - money;
- cout<<value;
这正是利用了switch的"跨case"特性,使程序简明清晰!
完整代码:
- #include<iostream>
- using spacename std;
- void main()
- {
- double value = 0;
- double money = 832.5;
- double b_money = money;
- switch((int)money/100)
- {
- case 9:
- case 8:
- value = money * 0.05;
- money = money - value;
- case 7:
- case 6:
- value = money * 0.03;
- money = money - value;
- case 5:
- case 4:
- value = money * 0.02;
- money = money - value;
- case 3:
- case 2:
- money -= 10;
- break;
- default:
- money -= 5;
- }
- value = b_money - money;
- cout<<value;
- }
代码在winxp,vc2005下实现
- VB转学VC的switch困惑
- c++转学java的笔记
- 澄清VB调用API时字符串参数的困惑
- 就转学习编程的主要问题
- 转学习的细节之Block编程
- VB与VC的区别
- vb调用vc的dll
- VC 调用 VB 的DLL
- Vb 与 Vc 的区别
- VC下ComboBox 不显示下拉框的困惑
- Java性能测试的困惑:switch和map的性能比较
- 在vb,vc中调用vb编写的DLL
- 在vb,vc中调用vb编写的DLL
- 从C++转学JAVA必须要注意的几个地方
- 金融管理专业的大学生因爱好转学编程
- 在美上二年制大学和转学的经验分享
- 一个只学过C++的伙计转学PHP 历程
- VC switch case
- 注意C#与C++的数组定义区别
- Oracle DBA 路途遥远
- 创建用户
- JavaScript烟花效果
- Oracle导入导出
- VB转学VC的switch困惑
- 《非诚勿扰》被删掉的精彩台词
- 【编程游戏】贺岁放礼花。(点燃续帖1-77楼muxrwc的焰火)
- 2008年互联网盘点:熙熙攘攘的六大事件
- 四个开放源代码审查工具【图文】(转)
- 无软驱情况下服务器RAID的安装方法
- [双语阅读]2008年世界各地奇闻趣事
- 用ies4linux图形化安装IE 7
- 微软推出新操作系统:Window 7