C++ файловый ввод/вывод

Возник вопрос. Вот я написал такой код для заполнения файла строками, что вводится с клавиатуры.

#include <fstream>
#include <string>

using namespace std;

int main()
{
    int numberOfStrings;
    string str;
    ofstream file("1.txt");
    cin >> numberOfStrings;
    cin.ignore(1);
    for(int i=0; i<numberOfStrings; i++){
        getline(cin, str);
        file << str << endl;
    }


    ifstream in("1.txt");
    while(!in.eof()){
        in >> str;
        cout << str << endl;
    }
    return 0;
}

вроде как все просто: считываю строчки, записываю в файл, а потом считываю файл. Вопрос: почему последняя строка читается дважды? Просто если не послать при записи в файл последний endl, то такого эффекта не наблюдаю. Зато предпоследняя последняя строка дублируетсяили вообще не считывается(в зависимости от того, как считываю:getline(in, str) или in >> str) Так же если просто считывать через getline(in, str), а не через in >> str(и не менять запись в файл), то выводится пустая строка. Почему такой расколбас?)


Ответы (0 шт):