《C++PrimerPlus 6th Edition》第6章 分支语句和逻辑运算符 要点记录

《C++PrimerPlus 6th Edition》第6章 分支语句和逻辑运算符 要点记录

要点

  1. cin.get(ch);逐字符计数时,字符总数中包括按回车键生成的换行符

  2. 对于char ch;注意cout<<++ch;cout<<ch+1;的区别(前者类型char、后者类型int)

  3. C++规定,||运算符是个顺序点(sequence point),即先修改左侧的值,再对右侧的值进行判定。例如:i++ < 6 || i == j,若i原来的值为10,则i与j比较时已是11;&&也如此

  4. ||第一项为true时结束对后面的判定,因为此时表达式必为true;&&的第一项为false结束对后面的判定,因为此时表达式必为false

  5. if(17 < age < 35)合法,但并非判断age介于[17,35]之间,且表达式总为true

  6. and、or、not分别对应&&、||、!,都是C++保留字,使用它们无需使用头文件,但对于C语言则需要头文件iso646.h

  7. 【函数库cctype】(or ctype.h)

    函 数 名 称 返 回 值
    isalnum() 如果参数是字母或数字,返回true
    isalpha() 如果参数是字母,返回true
    iscntrl() 如果参数是控制字符,返回true
    isdigit() 如果参数是数字(0-9),返回true
    isgraph() 如果参数是除空格外的打印字符,返回true
    islower() 如果参数是小写字母,返回true
    isprint() 如果参数是打印字符,返回true
    ispunct() 如果参数是标点符号,返回true
    isspace() 如果参数是标准空白字符,如空格、进纸、换行符、回车、水平制表符或垂直制表符,返回true
    isupper() 如果参数是大写字母,返回true
    isxdigit() 如果参数是十六进制数字,即0-9、a-f或A-F,返回true
    tolower() 如果参数是大写字母,则返回其小写,否则返回该参数
    toupper() 如果参数是小写字母,则返回其大写,否则返回该参数
  8. 条件运算符?:是C++中唯一的三元运算符,即需要三个操作数的运算符

  9. 如果既可以使用if else if语句,也可以使用switch语句,则当选项不少于3个时,应使用switch语句,但switch的标签只能是整数常量(char、枚举量也行)

  10. 对于for循环来说,continue语句虽然会导致程序跳过循环体的剩余部分,但不会跳过循环的更新表达式(如果有的话)

  11. 程序发现用户输入错误内容时,应采取3个步骤:①重置cin以接受新的输入;②删除错误输入;③提示用户再输入。 一个处理错误输入的示例:

    for (int i=0; i<Max;++i){
          
          
    	cout<<"round #"<<i+1<<": ";
    	while (!(cin>>golf[i])){
          
          
    		cin.clear(); //reset input
    		while (cin.get() != '\n') // 滤去错误输入的字符
    			continue;
    		cout<<"Please enter a number: ";
    	}
    }
    

    说明:如果省略cin.clear(),程序将拒绝继续读取输入;内置的while循环中cin.get()用于读取行尾之前的所有输入,从而删除这一行中的错误输入

  12. 所有可用于cout的操作和方法(如<<、endl和setf())都可用于ofstream对象,所有可以用于cin的操作和方法都可以用于ifstream对象

    cout<<fixed;
    cout.setprecision(2);
    cout.setf(ios_base:: showpoint);
    //...
    ofstream outFile;
    //打开等操作
    outFile << fixed;
    outFile.setprecision(2);
    outFile.setf(ios_base:: showpoint);
    //...
    
  13. 打开已有的文件,以接受输出时,默认将它长度截短为0,因此原来的内容将丢失

  14. open()方法接受一个C-风格字符串作为参数

  15. 函数exit()的原型是在头文件cstdlib中定义的;方法is_open()用于检查文件是否成功打开,如果编译器不支持它,可以使用较老的方法good()来代替,但方法good()在检查可能存在的问题方面,没有is_open()那么广泛

  16. 检查文件是否被成功打开非常重要,下面是一些可能出现问题的地方:①制定的文件可能不存在;②文件可能位于另一个目录;③访问可能被拒绝;④用户可能输错了文件名或省略了扩展名

  17. 读取文件时,有几点需要检查:①程序读取文件时不应超过EOF。如果最后一次读取数据时遇到EOF,方法eof()将返回true;②程序可能遇到类型不匹配的情况,此时方法fail()返回true(如果遇到EOF该方法也会返回true);③可能出现意外的问题,如文件受损或硬件故障,此时方法bad()返回true。
    然而不用分别检查这些情况,一种更简单的方法是使用good()方法,该方法在没有发生任何错误时返回true

  18. 表达式inFile >> value一般情况下的结果为inFile,而在需要一个bool值的情况下,inFile的结果为inFile.good(),即true或false

习题

【部分习题】

  1. 请认真考虑下面程序:

    #include<iostream>
    using namespace std;
    int main(){
          
          
    	char ch;
    	int ct1,ct2;
    	
    	ct1=ct2=0;
    	while((ch=cin.get()) != '$'){
          
          
    		cout<<ch;
    		ct1++;
    		if(ch='$')
    			ct2++;
    		cout<<ch;
    	}
    	cout<<"ct1= "<<ct1<<", ct2= "<<ct2<<"\n";
    	return 0;
    }
    

    假设输入如下(请在每行末尾按回车键):

    Hi!
    Send $10 or $20 now!
    

    则输出将是什么?

  2. 与使用数字相比,使用字符(a或c)表示菜单选项和case标签有何优点?

【习题参考答案】

  1. 输入和输出结果
    Hi!
    H$i$!$
    $Send $10 or $20 now!
    S$e$n$d$ $ct1= 9, ct2= 9
    
    
  2. 如果使用整数标签,且用户输入了非整数(如q),则程序将因为整数输入不能处理字符而挂起。但是,如果使用字符标签,而用户输入了整数(如5),则字符输入将5作为字符处理。然后,switch语句的default部分将提示输入另一个字符。

习题参考代码见我的github(上传后会把链接打上)

欢迎各位大佬们于评论区进行批评指正~


上一篇文章:《C++PrimerPlus 6th Edition》第5章 循环和关系表达式 要点记录

下一篇文章:《C++PrimerPlus 6th Edition》第7章 函数 要点记录

猜你喜欢

转载自blog.csdn.net/weixin_42430021/article/details/107166465