上一篇文章介绍了C++的文件流,一库两类。
本文再结合一个例子,从一个文本文件5integers.txt中读取5个数据,然后求和。通过这个例子,进一步熟悉和掌握提取操作符及文件流的语法特性。
在5integers.txt中,分5行存放了5个数据:
10
20
30
40
50
为了读取这些数据,我们需要用到读文件流ifstream, 通过它的方法open(filename)来打开5integers.txt。
通过一个循环,用流的提取操作符>>, 从文件中逐个提取数据,并累计求和。
提取操作符>>返回的是流本身,因此,很方便来判断是否已经读到文件尾部,当读到文件尾部的时候,提取操作符返回的文件流的值就会变为false,以次为依据结束读文件操作。
#include <fstream> //读文件流ifstream的头文件
#include <iostream> //cout的头文件
using namespace std;
int main()
{
ifstream inputFile; //创建一个读文件流对象
inputFile.open("5integers.txt"); //打开文件5integers.txt, 该文件与本示例源文件处于同一目录下
int total = 0; //保存求和的变量
int value; //每次从文件流中提取的整数,保存在该变量中
if (inputFile.fail()) //如果打开文件失败,比如没找到文件,方法fail()的值就会为真。
{
cout << "File open failure." << endl; //给出打开文件失败的提示信息
}
else
{
cout << "File open success!" << endl; //给出打开文件成功的提示信息
//从文件流中提取数据,存于value中。如果读到文件结束位置,则括弧中的逻辑值为false。
while(inputFile>>value)
{
total += value;
}
cout << "The total of 5 integers is: " <<total<< endl;
inputFile.close(); //关闭文件,解除文件流与文件的连接。
}
return 0;
}
程序运行会输出求和结果: 150.
这里有一个需要注意的地方,就是提取操作符>>的强大功能,它读取的是文本数据,从文件流提取出来,要放到整型变量value中去,因此,提取操作符>>就自动完成了把文本(10,20,30,40,50)转换成整数的工作。
问题: 如果把value和total都声明成std::string型对象,那么提取操作符>>从文件中提取的数据,就会保存为std::string格式,最后输出结果为1020304050. 相关代码代码此处从略,有兴趣的可以写写看。
小结:
提取操作符 >>,提取出来的数据是何种类型,是根据接收这个数据的变量类型而定。