C++文件流public function—eof()
来源:互联网 发布:unity3d源代码 编辑:程序博客网 时间:2024/06/03 17:54
在读取文件时,C++读取文件操作在判断文件结尾时都需用到eof()函数,但在使用该函数时经常会碰到结尾多读一个字符的情况,即末位字符重复出现一次。
出现这种情况的原因:
文件的结尾都有一个不可见尾字符——oxff,该字符标志文件的结束;C++文件流中eof()函数在读到文件末尾时,并不会立刻返回true,而是停顿一下,再读一次,于是就出现了末位字符重复出现的情况。
解决方法:
此时C++文件流中的good()函数就能发挥作用了,在对文件读入的字符操作前,使用文件对象调用good()函数进行判断,例如:
if(readFile.good()){//在此处写入对读入字符的操作,例如:cout<<ch;}或者调用函数peek(),peek()函数并不会真正读取下一个字符,即文件指针并不会向后移动一位,只是查看缓冲区中的下一个元素。例如:
if(readFile.peek()!=EOF){ readFile>>ch; cout<<ch<<ends;}以上两种方法都不能解决此类问题;下面讲述一个C++文件读取的例子,主要用于学习文件流中的函数的使用。
1.打开文件
在C语言中,打开文件调用函数fopen,加上if条件句构成若打开错误则对出错情况进行处理的代码,在C++中可以这么写:
ifstream readFile;readFile.open(fileName);//打开文件不成功,终止if (readFile.fail()){exit(1);}//打开文件成功if (readFile.is_open()){ //打开成功,在此处写对文件内容操作的代码}C++文件流中fail()函数可用于判断是否成功关联文件和文件对象,他的意思是若打开失败则....(执行相关代码,最后调用exit(1);返回给系统结束程序运行)。
is_open()函数也有同样的功能,它的意思是若成功打开文件,则...(执行相关代码,此时不用调用exit(1))。
2.读文件,判断结尾
while (!readFile.eof()){//此处写代码}3.判断是否到结尾,防止重复读取末位字符
if (readFile.good()){//若未到结尾,则继续操作}4。关闭文件对象
readFile.close();
最后给出一个例子
//构建串void StrAssign(string fileName){S = (Node *)malloc(sizeof(Node));ifstream readFile;readFile.open(fileName);//打开文件不成功,终止if (readFile.fail()){exit(1);}//打开文件成功,构建串if (readFile.is_open()){char ch;Node *r, *p;//尾插法r = S;//不断链接数据节点while (!readFile.eof()){readFile >> ch;if (readFile.good()){p = (Node *)malloc(sizeof(Node));p->data = ch;r->next = p;r = p;}}//处理尾节点指针域r->next = NULL;}//未成功打开文件,生成空串else{S->next = NULL;}readFile.close();}
0 0
- C++文件流public function—eof()
- C/C++文件之eof()
- C/C++文件之eof()
- C/C++文件之eof()
- C/C++文件之eof()
- C/C++ EOF文件结束标记总结
- C语言文件结尾标志EOF用法
- c语言文件中EOF和feof
- C/C++文件之eof()误区
- C语言文件操作之EOF解析
- C/C++ EOF文件结束标记总结
- C++EOF
- Public Function Young
- Public Function ConnectString
- c++的文件流中的eof()问题
- c++的文件流中的eof()问题
- 文件流读取之EOF与Peek
- C语言中的文件中止标志EOF如何输入
- oracle数据库的常见数据类型
- mysql 5.6 从陌生到熟练之-数据库备份恢复
- poj 2564 Edit Step Ladders TRIE树+dp求图中最长路
- awk输出特殊字符
- hdu 5036 Explosion(有向图的删点期望+bitset优化)
- C++文件流public function—eof()
- eclipse反编译插件
- codeforces 324# E. Anton and Ira (暴力枚举+贪心)
- 网络传输知识总结及AFNetworking使用心得
- 学习软件测试应该读哪些书
- UIButton添加长按事件
- context详解
- 机器学习(六)梯度下降的优化算法和matlab/octave中的应用
- Android 6.0 新增API 简介(2)