getline()没有读第一行

时间:2014-10-31 23:19:28

标签: c++

我是c ++初学者,这是为了学校..

我正在尝试阅读一个大约28kb的文件。该程序有效,但它不打印前41行。它适用于较小的文件。 起初我正在读取一个char数组并将其切换为字符串。 我也试过更改日志缓冲区,但显然它应该足够大.. 我觉得这应该很简单,但只是想不出来..

任何帮助都会受到很大的影响.. 谢谢!

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <cerrno>

using namespace std;

struct espion
{
    char nom[30];
    char pays[20];
    char emploi[29];

};


int main()
{
    const int MAX_NOM = 30, MAX_PAYS = 20, MAX_EMPLOI = 29;
    char nomFichier[50] = "espion.txt";



    ifstream aLire;
    aLire.open(nomFichier, ios::in|ios::binary);

    if(!aLire.is_open()){
        exit(EXIT_FAILURE);
    }


    std::string infoEspion;


    while(aLire)
    {
        infoEspion.clear();
        std::getline(aLire, infoEspion);
        cout << infoEspion ;

    }

    aLire.close();


    system("pause");
    return 0;

}

1 个答案:

答案 0 :(得分:0)

从系统(&#34;暂停&#34;),看起来您正在Windows上运行。使用ios :: binary,行尾标记不会被翻译,而cout&lt;&lt; infoEspion;声明打印这些&#34; raw&#34;以这样的方式排列所有行都在彼此之上。 (更具体地说,每一行都以返回但没有换行结束,因此在执行每个cout语句之后光标会返回到同一行的开头。)如果你取出ios :: binary,你将回显所有的在一条很长的线上输入。将语句更改为cout&lt;&lt; infoEspion&lt;&lt; ENDL;将呼应所有的线条。