C++中读取文本文件的详细解析

C++中读取文本文件的详细解析

接下来介绍文本文件输入,它是基于控制台输入的。控制台输入涉及多个方面,下面首先总结这些方面。
必须包含头文件 iostream。
头文件 iostream 定义了一个用处理输入的 istream 类。
头文件iostream声明了一个名为cin的istream 变量(对象)。
必须指明名称空间std;例如,为引用元素cin,必须使用编译指令using 或前缀std::。
可以结合使用 cin和运算符>>来读取各种类型的数据。
可以使用 cin 和 get()方法来读取一个字符,使用 cin 和 getline()来读取一行字符。
可以结合使用cin和eof)、fail()方法来判断输入是否成功。
对象cin本身被用作测试条件时,如果最后一个读取操作成功,它将被转换为布尔值 true,否则被转换为 false。
文件输出与此极其相似:
必须包含头文件 fstream。
头文件 fstream 定义了一个用于处理输入的 ifstream 类。
需要声明一个或多个 ifstream 变量(对象),并以自己喜欢的方式对其进行命名,条件是遵守常用的命名规则。
必须指明名称空间 std;例如,为引用元素ifstream,必须使用编译指令using 或前缀 std:.。
需要将 ifstream 对象与文件关联起来。为此,方法之一是使用open()方法。
使用完文件后,应使用close()方法将其关闭。
可结合使用 ifstream 对象和运算符>>来读取各种类型的数据。可以使用 ifstream 对象和 get()方法来读取一个字符,使用ifstream 对象和 getline()来读取一行字符。可以结合使用ifstream和eof()、fail()等方法来判断输入是否成功。ifstream 对象本身被用作测试条件时,如果最后一个读取操作成功,它将被转换为布尔值 true,否则被转换为 false。
注意,虽然头文件 iostream 提供了一个预先定义好的名为cin的istream 对象,但您必须声明自己的ifstream 对象,为其命名,并将其同文件关联起来。下面演示了如何声明这种对象:

ifstream inFile;
ifstream fin;
//inrile an ifstream object
// fin an ifstream obiect

下面演示了如何将这种对象与特定的文件关联起来:

inFile.open("bowling.txt");//inFile used to read bowling.txt file
char filename[50];
cin >> filename;
fin.open(filename);
//user specifies a name
//fin used to read specified file

注意,方法 open()接受一个C-风格字符串作为参数,这可以是一个字面字符串,也可以是存储在数组中的字符串。
下面演示了如何使用这种对象:

double wt;
inFile >> wt;
// read a number from bowling.txt
char line[81];
fin.getline(line,8l);//read a line of text

重要的是,声明一个ifstream 对象并将其同文件关联起来后,便可以像使用 cin 那样使用它。所有可用
于 cin 的操作和方法都可用于 ifstream 对象(如前述示例中的 inFile 和 fin)。如果试图打开一个不存在的文件用于输入,情况将如何呢?这种错误将导致后面使用ifstream 对象进行输入时失败。检查文件是否被成功打开的首先方法是使用方法is_open(),为此,可以使用类似于下面的代码:
inFile.open(“bowling.txt”);
if(!inFile.is open())
exit(EXIT FAILURE);
如果文件被成功地打开,方法isopen()将返回true;因此如果文件没有被打开,表达式!inFile.isopen(将为true。函数 exit()的原型是在头文件 cstdlib 中定义的,在该头文件中,还定义了一个用于同操作系统通信的参数值 EXIT FAILURE。函数exit( )终止程序。
方法 is_open()是 C++中相对较新的内容。如果读者的编译器不支持它,可使用较老的方法 good()来代替。正如第17章将讨论的,方法good()在检查可能存在的问题方面,没有is_open()那么广泛。

对C++感兴趣的朋友点这里:C/C++课程

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值