background image

Here is a number: 150 Now here is a string: John Doe 

  很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作,对 
"<<" 和">>" 比较熟悉了, 

因为你接下来还要用到他们。继续

  二、ASCII 输入

  输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复
杂的内容之前, 先看一个文本:

12 GameDev 15.45 L This is really awesome! 

  为了打开这个文件,你必须创建一个 in-stream 对象,?像这样。

ifstream fin("input.txt"); 

  现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在 
"<<" (插入)?操作符之后,是">>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.

int number;
float real;
char letter, word[8];
fin >> number; fin >> word; fin >> real; fin >> letter; 

  也可以把这四行读取文件的代码写为更简单的一行。

fin >> number >> word >> real >> letter; 

  它是如何运作的呢? 文件的每个空白之后, ">>" 操作符会停止读取内容, 直到遇到
另一个>>操作符. 因为我们读取的每一行都被换行符分割开(是空白字符), ">>" 操作符
只把这一行的内容读入变量。这就是这个代码也能正常工作的原因。但是,可别忘了文件
的最后一行。

This is really awesome! 

  如果你想把整行读入一个 char 数组, 我们没办法用">>"?操作符,因为每个单词之
间的空格(空白字符)会中止文件的读取。为了验证:

char sentence[101]; fin >> sentence; 

  我们想包含整个句子, "This is really awesome!" 但是因为空白, 现在它只包含
了"This". 很明显, 肯定有读取整行的方法, 它就是 getline()。这就是我们要做的。

fin.getline(sentence, 100);