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

Moh*_*bil 8 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();
Run Code Online (Sandbox Code Playgroud)

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

但我的问题是为什么我第二次尝试打印线.它不打印?

Ker*_* SB 39

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

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

    for (std::string line; std::getline(filein, line); )
    {
        std::cout << line << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:

  • close().当习惯使用时,C++会为您处理资源管理.

  • 使用free std::getline,而不是stream成员函数.

  • 问题是,如果98个字符中没有换行符,则认为它是失败的,因此,流被置于失败模式,即设置了`std :: ios_base :: failbit`.设置此位后,流将不会提取任何字符.然而,奇怪的是,它修改了字符数组以将空字符存储到下一个,即第一个位置. (5认同)
  • 这实际上对我的问题没有任何帮助 (2认同)
  • 因此,这是处理流的最惯用的方式。 (2认同)

Rom*_*lak 11

根据C++参考(此处),getline设置ios::fail何时提取count-1个字符.你必须在两次通话filein.clear();之间getline()打电话.

  • 对您的答案进行一些解释会很好。什么是ios :: fail和发生了什么:D (2认同)
  • 我喜欢像你这样的人,像那样推动我前进.再次感谢 (2认同)