用户登录
用户注册

分享至

C++primier plus 第六章总结

  • 作者: 飞我莫曙
  • 来源: 51数据库
  • 2021-08-25

这里写目录标题

  • 杂项
    • 程序清单6.2
    • if if 还是 if else if
    • 字符函数库 cctype
    • 三目运算符 ?:
    • switch case与枚举
    • 读取数字的循环
  • 简单文件输入/输出
    • 写入到文本文件
    • 读取文本文件
    • 在课后题遇到的问题

杂项

程序清单6.2

这里出现了一个cout<<++ch;这时候是输出一个char 字符,因为同类型不涉及隐式转换,如果是cout<<ch+1; 由于1是int,所以吧ch转为int,输出该字符对应的ASCII

if if 还是 if else if

如果多个判断项不能共存,也就是说多个判断项同时只能有一个成立,那么应该写if else if,这样当其中有一个成立时,后面的判断就不继续进行了,如果写了好多个if,是每一个都要进行判断的

字符函数库 cctype

C++11中直接包含 cctype即可,也可以写 ctype.h,其中包含了很多现成的函数帮助我们进行字符的判断及处理

三目运算符 ?:

expression1 ? expression2 : expression3
这里书中给了一个有点抽象的三目运算符

const char x[2] [20] = {"Jason", "at your service\n"};
const char * y = "Queen";
for(int i=0;i<3;i++)
	cout<<((i<2)?  !i?x[i]:y  :x[1]);
应该输出的是 Jason Queen at your service
书中的cout是连在一起的,我通过加上空格,有助于理解

switch case与枚举

枚举类型是不能作为switch后面括号的内容的,但是可以作为case标签,这是如果switch将int值和枚举量标签进行比较时,将枚举类型提升为int,在while循环中,也会把枚举类型提升为int

读取数字的循环

这里需要注意的一点是

int n;
cin>>n;

如果我们这里不输入数字会发生什么:

  1. n的值不发生变化
  2. 错误的如输入还在缓冲区里没被读走
  3. cin对象的错误标记被设置,这里的错误标记是 failbit
  4. 对cin方法的调用将返回false,通过cin.bat()进行查看
    对应的处理方法
  5. 恢复cin对象的状态,也就是清除异常状态,通过 cin.clear() ,这个方法也是接受参数的,如果是clear(eofbit),就是只恢复这一位
  6. 删除错误输入,也就是清空输入缓冲区

上面这部分对应之前的博客有讲过,链接

简单文件输入/输出

写入到文本文件

  1. 包含头文件 fstream
  2. 创建一个ofstream对象, ofstream fout
  3. fout.open(),括号中的参数需要一个C风格字符串,表示文件路径,如果文件不存在,会直接创建
  4. 像使用cout一样去使用fout吧!

读取文本文件

  1. 包含头文件
  2. 创建ifstream对象
  3. open一个文件,这里如果路径不存在的话,会有异常产生,为了避免这个可以用 is_open方法,判断返回值
  4. 开始像cin一样去操作,可以结合ifstream和eof(),fail()去查看流的状态判断操作是否成功

在课后题遇到的问题

最后一题中,fin>>int 把第一行的4读取之后,换行符还留在了缓冲区里,导致使用getline(ifstream, name)时,把换行符误读走了,这个问题的原因与下面的一样

int main()
{	
	int a;
	char b[2];
	cin >> a;
	cin.getline(b, 2);
	cout << a << "--" << b;
}

根本没有输入b数组的机会,因为换行符还在缓冲区,所以也一样,需要先吃掉换行符

软件
前端设计
程序设计
Java相关