C++ primer plus 第六章 分支语句和逻辑运算符
简单文件输入/输出
文本i/o和文本文件
不同数据下cin读取状况
设输入是
38.5 19.2
char
char ch;
cin>>ch;
cin将读取第一个字符
第一个字符’3’其字符编码被赋值给ch,输入和目标变量都是字符,不需要进行转换.
ch储存的不是数值3,而是字符’3’.
int
int n;
cin>>n;
cin将不断读取直到遇到非整数字符(小数点也不是)
cin读取"38"并转换成数值38给n
double
double n;
cin>>n;
cin不断读取直到遇到第一个不是浮点数的字符
cin读取"38.5"并将其转换成数值
char[]
cin不断读取直到遇到空白字符
cin读取"38.5"赋值给char [];并且把char[5]标记成’/0’
cin.getline(char *,int num)读取char []
cin不断读取直到遇到num-1个字符或者换行符(会被丢弃),在最后一个(即是char [num-1]上)加上’/0’标识符,输入队列的下一个字符是下一行中的第一个字符,这里不需要进行任何转换.
写入到文本文件中
C++利用cout来完成文件输出
文件输出的具体要求
- 必须包含头文件
- 头文件定义了一个用于处理输出的osteam类
- 需要声明一个或者多个ofsteam变量(对象)
- 必须指明命名空间
- 需要将ofsteam对象和文件关联起来,方法之一是用open()
- 使用完文件之后应该用close()将其关闭
- 可以结合ofsteam对象和运算符<<来输出各种类型的数据.
例子
ofsteam outfile;
ofsteam fout;
outfile.open("fish.text");
char filename[50];
cin>>filename;
fout.open(filename);//fout used to read specified file
//读一个filename[50]写到fish.text里
//fout.open()接受一个c-string作为参数(即char *,字面字符串或者储存在数组中的字符串)
应用
重要的是声明一个ofsteam对象并将其同文件关联起来之后就可以像使用cout一样使用它,用于cout的操作和方法(例如<<.endl和seft())都可以用于ofsteam对象.
在声明一个ofsteam对象之后可以用方法open()将对象和特定文件关联起来
ofsteam outFile;
outFile.open("carinfo.txt");
//....
//注意用完之后要用方法close()关闭文件
outFile.close();//这个close(不需要参数)
open()
open(char *)在操作时如果char *名称的文件不存在,那么将新建一个char *文件,如果存在,将默认将其长度截断为0(如果这个文件允许访问的话,否则也可能出现打开失败)
读取文本文件
具体要求
- 大部分和写入文件要求相似
- 头文件fsteam
- fsteam中定义了用于文件输出的ifsteam类
- 需要声明一个或者多个ifsteam类的对象并且用open()把他们和文件关联起来.
- 使用后应该用close()将其关闭
- 可以使用cin的各种方法(>>运算符,get(),getline()等)
- 可以配合eof(),fail()等方法来判断输入是否成功
- ifsteam对象本身被作为判断条件时,如果最后一个读取操作成功返回true否则返回flase
常用测试语句
ifsteam inFile;
inFile.open("bowling.txt");
if(!inFile.is_open())
{
exit(EXIT_FAILURE);
}
//或者直接把inFile.open()放到判断里
//if you need to use the report of exit you should include<cstdlib>
inFile.good()
good()函数存在在ifsteam类下,在文件读取良好(即fail()不是true)并且没有到达EOF(eof()不是true)的时候good()返回true,它是最简单的判断文件打开和关联有没有问题的方法之一.它指出最后一次读取是否成功
事实上inFile>>num;返回的是inFile,在需要bool值的时候inFile的返回值实际上就是inFile.good()的返回值.
逻辑运算符
||运算符 或 OR
有1则1;
A||B;
||运算符是一个顺序点
&&运算符 且 AND
A&&B;
&&也是顺序点
A是0的时候不对B做计算(不产生副作用)
常用于找取值范围