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;
如果我们这里不输入数字会发生什么:
- n的值不发生变化
- 错误的如输入还在缓冲区里没被读走
- cin对象的错误标记被设置,这里的错误标记是 failbit
- 对cin方法的调用将返回false,通过cin.bat()进行查看
对应的处理方法 - 恢复cin对象的状态,也就是清除异常状态,通过 cin.clear() ,这个方法也是接受参数的,如果是clear(eofbit),就是只恢复这一位
- 删除错误输入,也就是清空输入缓冲区
上面这部分对应之前的博客有讲过,链接
简单文件输入/输出
写入到文本文件
- 包含头文件 fstream
- 创建一个ofstream对象, ofstream fout
- fout.open(),括号中的参数需要一个C风格字符串,表示文件路径,如果文件不存在,会直接创建
- 像使用cout一样去使用fout吧!
读取文本文件
- 包含头文件
- 创建ifstream对象
- open一个文件,这里如果路径不存在的话,会有异常产生,为了避免这个可以用 is_open方法,判断返回值
- 开始像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