C++ Primer 学习笔记_19_语句 --if/switch/while/for语句
来源:互联网 发布:电子设备审计软件功能 编辑:程序博客网 时间:2024/06/13 13:49
语句
--if/switch/while/for语句
1、空语句:用于语法上需要一个语句,而逻辑上并不需要的位置,此时需要一个空语句,如:
- while (cin >> s && s != sought)
- ; //空语句
无关的空语句并不是总是无害的!
- //此处的空语句使得循环无法正常结束!
- while (iter != ivec.end());
- ++iter;
2、复合语句是用一对花括号将几条语句扩起来,使其在语法上成为单个语句。
3、语句作用域
在语句的控制结构中定义的变量,仅在定义他们的块语句结束前有效。
对于控制语句中定义的变量,限制其作用域的一个好处是:这些变量名可以重复使用而不必担心他们的当前值在每一次使用时是否正确。对于作用域外的变量,是不可能用到其在作用域内的残留值的!
4、if语句
如果在条件表达式中定义了变量,那么变量必须初始化。而且:将已初始化的变量值转换成为bool类型值后,该bool类型值决定条件是否成立!
- if (int ival = compute_value())
- {
- //...
- }
【建议:】在if后面使用花括号,这样可以避免日后修改代码时产生混乱和错误。因此,无论if(或者while,for,dowhile)后面是简单语句,例如:赋值或输出语句,还是其他任意类型的语句,使用花括号都是一个比较好的做法!
5、switch语句
switch语句提供了一种更方便的的方法来实现深层次嵌套的if/else逻辑
- char ch;
- int aCnt = 0,eCnt = 0,iCnt = 0,
- oCnt = 0,uCnt = 0;
- while (cin >> ch)
- {
- switch (ch)
- {
- case 'a':
- ++aCnt; //不要忘记后面的break标号!
- break;
- case 'e':
- ++eCnt;
- break;
- case 'i':
- ++iCnt;
- break;
- case 'o':
- ++oCnt;
- break;
- case 'u':
- ++uCnt;
- break;
- }
- }
- cout << "a: " << aCnt << '\n'
- << "e: " << eCnt << '\n'
- << "i: " << iCnt << '\n'
- << "o: " << oCnt << '\n'
- << "u: " << uCnt << endl;
如果表达式与其中一个case标号的值匹配,则程序将从该标号后面的第一个语句开始依次执行各个语句,知道switch结束或者遇到break语句为止!
6、default标号
- char ch;
- int vowelCnt = 0;
- int otherCnt = 0;
- while (cin >> ch)
- {
- switch (ch)
- {
- case 'a':
- case 'e':
- case 'i':
- case 'o':
- case 'u':
- ++vowelCnt;
- break;
- default:
- ++otherCnt;
- break;
- }
- }
- cout << "vowel: " << vowelCnt << endl;
- cout << "other: " << otherCnt << endl;
哪怕没有语句要在default标号下执行,定义default标号仍然是有用的。定义default标号是为了告诉读者,表明这种情况已经考虑到了,只是没什么要执行的!
7、switch表达式与case标号
switch求解的表达式可以非常复杂。特别是,该表达式还可以定义和初始化一个变量:
- switch(int ival = get_reponse())
- {
- //...
- }
而case标号必须是整型常量表达式
- case 3.14: //error
- //...
- break;
- case ival: //error
- //..
- break;
且只能在最后一个case标号或default标号下才可以定义变量:
- case 'a':
- string name = "xiaofang"; //error
- break;
- case 'b':
- //..
- break;
如果必须为某个特殊的case定义变量,则需引入块语句,在该块语句中定义变量:
- case 'a':
- {
- string name = "xiaofang"; //ok
- }
- break;
- case 'b':
- //..
- break;
8、while语句
在while中,循环条件可以是一个表达式,也可以是一个提供初始化的变量定义:
- while (int loc = search(name))
- {
- //...
- }
而且,在循环条件中定义的变量在每次循环里都要经历创建和撤销的过程。
- //P179 习题6.12
- int main()
- {
- int maxCnt = 1,curCnt = 0;
- string now,last,ans;
- while (cin >> now)
- {
- if (now == last)
- {
- ++curCnt;
- }
- else
- {
- if (curCnt > maxCnt)
- {
- maxCnt = curCnt;
- ans = last;
- }
- curCnt = 1;
- }
- last = now;
- }
- if (curCnt != 1)
- {
- cout << ans << ": " << maxCnt << endl;
- }
- else
- {
- cout << "There is no repeated word!" << endl;
- }
- }
9、for循环与while的对比
while循环特别擅长在某个条件保持为真时反复的执行,而一般认为for循环是一种按步骤执行的循环!
- //P181 习题6.16
- int main()
- {
- vector<int> ivec1,ivec2;
- int value;
- while (cin >> value && value != 32767)
- {
- ivec1.push_back(value);
- }
- while (cin >> value && value != 32767)
- {
- ivec2.push_back(value);
- }
- unsigned int n = (ivec1.size() < ivec2.size() ? ivec1.size() : ivec2.size());
- for (vector<int>::size_type i = 0; i != n ; ++i)
- {
- if (ivec1[i] != ivec2[i])
- {
- cout << "false" << endl;
- return 0;
- }
- }
- cout << "true" << endl;
- }
10、dowhile语句
1)与while语句不同,dowhile保证循环体至少执行一次,而且dowhile语句是以;分号结束
2)如果把变量定义在了do内部,那么该变量的作用域就被限制在while前的花括号之前了
- do
- {
- int ival = 1;
- }
- while (ival == 1);//error
- //P183 习题6.18
- int main()
- {
- string str1,str2;
- do
- {
- cout << "Please input two strings:" << endl;
- cin >> str1 >> str2;
- if (str1 > str2)
- {
- cout << str1 << " is bigger!" << endl;
- }
- else
- {
- cout << str2 << " is bigger!" << endl;
- }
- cout << "continue?" << endl;
- cin >> str1;
- }
- while (str1 != "no" && str1 != "No" && str1 != "NO");
- }
- C++ Primer 学习笔记_19_语句 --if/switch/while/for语句
- 【Swift】学习笔记(五)——控制语句(if,switch,for-in,for,while,do-while)
- C++ Primer 学习笔记10 语句 (空语句、if语句、switch语句、for语句、dowhile语句、break语句、goto语句、continue语句、try块和异常处理)
- 传至播客学习笔记——基本语句(if switch while for)
- JAVA学习笔记4——if语句+switch语句+while语句
- 分支语句 循环语句 if,switch,do,while,for分析
- swift控制语句,for,while,repeat-while,if,switch
- 控制流程语句if、switch、while、do-while、for
- 循环控制语句for while do-while if switch
- C语言中流程控制语句(if,switch,for,while,do-while,continue,break,return)
- Python学习笔记(九):if、while、for语句
- 黑马程序员—if、switch、for、while语句
- C++中四大语句总结(while、for、if、switch)
- Swift控制语句(if,switch,forin,for,while,dowhile)
- 快速识别汇编中等价的C语言语句(if, while, for, switch)
- 快速识别汇编中等价的C语言语句(if, while, for, switch)
- 快速识别汇编中等价的C语言语句(if, while, for, switch)
- Java 笔记 之 流程控制语句( if & switch & for & while)
- svn 提交.a静态库文件方法
- scp命令
- 《学习日记》prototype,_proto_以及call\apply方法理解
- HDU 2577 How to Type(DP)
- LintCode-链表插入排序
- C++ Primer 学习笔记_19_语句 --if/switch/while/for语句
- POSTGRESQL 存储过程 select into 和 insert into select 两种表复制语句之间的差别
- mysql的查询、子查询及连接查询
- Openbr: nmake编译过程中出现 file DOWNLOAD HASH mismatch问题
- PBR:应用于虚幻引擎4贴图和材质创建的启示
- Web Service的三大技术
- android:layout_weight="1"
- 一个为OpenFlow规则分配与端点规则实施而设计的通用最优化框架(五)
- C++ Primer 学习笔记_20_语句(续) --break/continue/try,catch