C ++:使用ifstream和getline();

时间:2012-08-26 19:53:15

标签: c++ file-io fstream getline

检查此程序

ifstream filein("Hey.txt");
filein.getline(line,99);
cout<<line<<endl;
filein.getline(line,99);
cout<<line<<endl;
filein.close();

Hey.txt文件中有很多字符。超过1000

但我的问题是 为什么我第二次尝试打印线。它没有打印?

4 个答案:

答案 0 :(得分:34)

因此,从流中读取行的惯用方法是:

{
    std::ifstream filein("Hey.txt");

    for (std::string line; std::getline(filein, line); )
    {
        std::cout << line << std::endl;
    }
}

注意:

  • close()。当用于惯用语时,C ++会为您处理资源管理。

  • 使用免费std::getline,而不是流成员函数。

答案 1 :(得分:10)

根据C ++参考(here),getline在提取count-1个字符时设置ios::fail。您必须在filein.clear();来电之间拨打getline()

答案 2 :(得分:1)

#include<iostream>
using namespace std;
int main() 
{
ifstream in;
string lastLine1;
string lastLine2;
in.open("input.txt");
while(in.good()){
    getline(in,lastLine1);
    getline(in,lastLine2);
}
in.close();
if(lastLine2=="")
    cout<<lastLine1<<endl;
else
    cout<<lastLine2<<endl;
return 0;
}

答案 3 :(得分:0)

正如Kerrek SB所说的那样有两种可能性: 1)第二行是空行 2)没有第二行,超过1000个字符在一行中,所以第二行getline没有任何东西可以得到。