要点
-
用
cin.get(ch);
逐字符计数时,字符总数中包括按回车键生成的换行符 -
对于
char ch;
注意cout<<++ch;
与cout<<ch+1;
的区别(前者类型char、后者类型int) -
C++规定,
||
运算符是个顺序点(sequence point),即先修改左侧的值,再对右侧的值进行判定。例如:i++ < 6 || i == j
,若i原来的值为10,则i与j比较时已是11;&&
也如此 -
||
第一项为true时结束对后面的判定,因为此时表达式必为true;&&
的第一项为false结束对后面的判定,因为此时表达式必为false -
if(17 < age < 35)
合法,但并非判断age介于[17,35]之间,且表达式总为true -
and、or、not
分别对应&&、||、!
,都是C++保留字,使用它们无需使用头文件,但对于C语言则需要头文件iso646.h
-
【函数库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() 如果参数是小写字母,则返回其大写,否则返回该参数 -
条件运算符
?:
是C++中唯一的三元运算符,即需要三个操作数的运算符 -
如果既可以使用
if else if
语句,也可以使用switch
语句,则当选项不少于3个时,应使用switch
语句,但switch的标签只能是整数常量(char、枚举量也行) -
对于
for循环
来说,continue
语句虽然会导致程序跳过循环体的剩余部分,但不会跳过循环的更新表达式(如果有的话) -
程序发现用户输入错误内容时,应采取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()
用于读取行尾之前的所有输入,从而删除这一行中的错误输入 -
所有可用于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); //...
-
打开已有的文件,以接受输出时,默认将它长度截短为0,因此原来的内容将丢失
-
open()方法接受一个C-风格字符串作为参数
-
函数exit()的原型是在头文件cstdlib中定义的;方法is_open()用于检查文件是否成功打开,如果编译器不支持它,可以使用较老的方法good()来代替,但方法good()在检查可能存在的问题方面,没有is_open()那么广泛
-
检查文件是否被成功打开非常重要,下面是一些可能出现问题的地方:①制定的文件可能不存在;②文件可能位于另一个目录;③访问可能被拒绝;④用户可能输错了文件名或省略了扩展名
-
读取文件时,有几点需要检查:①程序读取文件时不应超过EOF。如果最后一次读取数据时遇到EOF,方法eof()将返回true;②程序可能遇到类型不匹配的情况,此时方法fail()返回true(如果遇到EOF该方法也会返回true);③可能出现意外的问题,如文件受损或硬件故障,此时方法bad()返回true。
然而不用分别检查这些情况,一种更简单的方法是使用good()方法,该方法在没有发生任何错误时返回true -
表达式
inFile >> value
一般情况下的结果为inFile,而在需要一个bool值的情况下,inFile的结果为inFile.good()
,即true或false
习题
【部分习题】
-
请认真考虑下面程序:
#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!
则输出将是什么?
-
与使用数字相比,使用字符(a或c)表示菜单选项和case标签有何优点?
【习题参考答案】
- 输入和输出结果
Hi! H$i$!$ $Send $10 or $20 now! S$e$n$d$ $ct1= 9, ct2= 9
- 如果使用整数标签,且用户输入了非整数(如q),则程序将因为整数输入不能处理字符而挂起。但是,如果使用字符标签,而用户输入了整数(如5),则字符输入将5作为字符处理。然后,switch语句的default部分将提示输入另一个字符。
习题参考代码见我的github(上传后会把链接打上)
欢迎各位大佬们于评论区进行批评指正~