几个C++文件输入常用函数(1)

来源:互联网 发布:速冻食品 知乎 编辑:程序博客网 时间:2024/05/24 04:40

        最近在做C++的大作业中的小作业,用到文件的地方很多。我也不是第一次用了,但是很久不用就是这么不熟悉,时常会忘记很多细节。今天就在这里总结一下。

1.文件的输入

ifstream fp_account("input.txt");
    if(!fp_account)//若打开失败
     {

        cout<<"input opens failed!"<<endl; 

return 0;

}
int i=0;
string in;
while(fp_account.peek()!=EOF)//????????????????
{
getline(fp_account,in);//不用吃换行符!
file[i].setBankName(in);
.......

}

.......

今天在调试的时候发现文件怎么都读不进string in。后来经过各种排查,才发现文件打开失败了。我很少遇到这样的问题,所以在一开始没有写文件打开失败的处理。结果这一偷懒耽误了我太多时间。最后我找到打开失败的原因时已经呵呵了:那个文件是input.txt.txt,图形化显示的时候没显示后缀,我把.txt当后缀了,其实人家是名字!!!

   还有就是getline的问题。对于各种读取字符、字符串的操作,换行符会不会被丢弃是个很重要的细节,每次用的时候我都会查。我之前查到说getline(cin,str)是读到换行符为止。后来发现其实是把换行符吃掉了。


2.文件末尾的判断

今天发现了一个好函数,叫fp.peek()。它的作用是在输入流中读取一个字符,若它不是EOF则放回缓冲区,若是则跳出。用起来就像这样:while(fp_account.peek()!=EOF).

本来我用的是while(!fp_account.eof()),但它会多循环一次。因为“在这里,大家可能有一个误区,认为eof()返回true时是读到文件的最后一个字符,其实不然,eof()返回true时是读到文件结束符0xFF,而文件结束符是最后一个字符的下一个字符[1]。


参考:

[1]http://larrycheung.blog.163.com/blog/static/1317296612011474934348/

0 0
原创粉丝点击