欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++primier plus 第六章总结

程序员文章站 2022-03-22 09:44:57
if else if和 if的区别三目运算符简答的文件输入输出...

杂项

程序清单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数组的机会,因为换行符还在缓冲区,所以也一样,需要先吃掉换行符

本文地址:https://blog.csdn.net/qq_36437446/article/details/107369157