c++关于eof及getline的用法

有如下语句:
ifstream fp1(astDataFileName.c_str());
if (!fp1)
{
cout << "fail in open " << astDataFileName.c_str() << endl;
cout << "get system size" << endl;
exit(0);
}
int k = 1;
string str;

for (;!fp1.eof();)
{
getline(fp1,str,'\n');
k++;
cout << str << endl;
}
请问下,fp1.eof()是怎么用的,每次读入一个字符,判断是不是文件结束符?
还有getline里面第二个参数str出现在这里是做什么用的?是不是读入一行,以换行符作为结束判断语句?下面的cout<<str会输出什么?

额。。。这个是getline函数的原型及解释 怎么看着和你程序用法不太一样,特别是第二个参数的用法。。。尴尬。。。
istream &getline( char *buffer, streamsize num, char delim );

getline()函数用于输入流,读取字符到buffer中,直到下列情况发生:

num - 1个字符已经读入,
碰到一个换行标志,
碰到一个EOF,
或者,任意地读入,直到读到字符delim。delim字符不会被放入buffer中。

这个是eof的原型和解释 还有一个小例子

语法:
bool eof();
如果到达相关联的输入文件的末尾,eof()函数返回true,否则返回false。

例如:

char ch;
ifstream fin( "temp.txt" );
while( !fin.eof() ) {
fin >> ch;
cout << ch;
}
fin.close();
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-29

1、istream &getline( char *buffer, streamsize num, char delim );
getline()函数用于输入流,读取字符到buffer中,直到下列情况发生:
num - 1个字符已经读入,
碰到一个换行标志,
碰到一个EOF,
或者,任意地读入,直到读到字符delim。delim字符不会被放入buffer中。

2、这eof的原型和解释 :
语法:
  bool eof();
如果到达相关联的输入文件的末尾,eof()函数返回true,否则返回false。
例如:

    char ch;
    ifstream fin( "temp.txt" );
    while( !fin.eof() ) {
      fin >> ch;
      cout << ch;
    }
    fin.close();

第2个回答  2016-01-09

1、c++示例:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
string textline[200];//欲读200行,自己定义 
int i=0,ii=0;
ifstream fin("d:/test.txt");
for(;!fin.eof();)//非文件尾部继续读
{
    getline(fin,textline[i],'\n');//遇到换行符读一行。
    i++;
}
for(int ii=0;ii<i;ii++)
cout<<textline[ii]<<'\n';

return 0;
}

2、eof()读到文件尾部返回真,非文件尾部返回假。

3、getline()按行读取文本。

c++关于eof及getline的用法
getline()函数用于输入流,读取字符到buffer中,直到下列情况发生:num - 1个字符已经读入,碰到一个换行标志,碰到一个EOF,或者,任意地读入,直到读到字符delim。delim字符不会被放入buffer中。这个是eof的原型和解释 还有一个小例子 语法:bool eof();如果到达相关联的输入文件的末尾,eof()函数返回tr...

求c++中eof的用法?最好能有具体代码。
在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。int c,n;int array[1000];while (scanf("%d",c),c!=EOF)\/\/从控制台输入数据,...

C++中,getline函数的详解
C++中本质上有两种getline函数,一种在头文件中,是istream类的成员函数。一种在头文件<string>中,是普通函数。一、在中的getline函数有两种重载形式:istream& getline (char* s, streamsize n );istream& getline (char* s, streamsize n, char delim );作用是从istream中读取至多n个字符保存...

请问C++怎么读到行结束和文件结束?
c++中有定义常量EOF作为文件尾 ifstream ifs("1.txt");char ch;while ((ch=ifs.get()) && ch!=EOF)...至于行结束,你可以使用输入流的成员函数getline或者非成员函数getline(前者针对char*,后者针对string),在函数中可以用'\\n'作为行结束符 ...

C++中getline 是什么意思?
istream& getline ( istream &is , string &str , char delim );istream& getline ( istream& , string& );都是将输入流的字符读入到字符串中,上面那个以你设定的终结符为结束标志,下面那个以换行符'\\n'作为结束。如果读到EOF或者遇到错误也会结束。

C++: getline() 如何控制每次读入txt文件数据,只读一行就停止,再执行...
while(!f1.eof()) \/\/当读取到文本末尾 { f1.getline(s,20,',','\\n'); \/\/以“,”“空格”为分割标记 c[i]=atoi(s); sum=sum+c[i]; i=i+1; }

C++读取文件getline 如何用getline整行读取txt文件内部的信息??? 高...
示意:ifstream in;in.open("myfile.txt"); \/\/ 文件名为myfile.txt in.getline(str, 80);\/\/ str是预先定义的字符数组,最大长度为80 \/\/不过文本文件的一行也要小于80,这句话读到'\\n'为止

c++ fstream问题
前面读到文件末尾了eof 状态,文件在错误状态下面拒接写入内容了,需要clear()清除一下错误状态才行。你把这个加到第2个while 循环前面就可以了 while(!file.eof ) getline(file,s1) ; cout<<s1<<endl;}if (!file.good()) { file.clear(); \/\/清除前面eof错误状态} ...

c++急急急!哪有问题?? 将文件123.txt的内容复制到文件456.txt,并在...
1.getline从状态为good的流上读取字节 2.getline读取字节直到碰到'\\n'(换行)或者读够n字节 3.如果读满n字节没有碰到'\\n',那么将把流状态置为fail 接下来就要修改你的代码:while(!indata.eof()){ if (indata.fail()) { indata.clear(); \/\/清除流状态 cout<<s;outdata<<s; \/\/ ...

C++中如何读入多行数据?
EOF一般用来判断文本结束, 不过C里自带检测的函数,可以这样使用:while(!feof(stdin)){ ...} \/\/其中stdin是标准文件输入指针, 见上. 本回答被提问者采纳 Fire_PKC | 推荐于2017-12-15 11:37:56 举报| 评论 0 1 用多行循环,gets()能读入包括空格的的字符串,cin.getline()也一样 爱问小圣 | ...

相似回答