Witam!
Problem jest taki, że w trakcie, gdy zaczynasz zmieniać plik poprzedni tekst nie istnieje dlatego zostanie tylko pierwsza linijka, którą wczytasz zanim usuniesz całą zawartość chcąc dodać jeden enter. Moim rozwiązaniem byłoby dodać chwilowy plik, do którego skopiujesz w trakcie wywoływania programu twój plik i na końcu usuniesz.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
string fraza;
fstream plik;
plik.open("zmiana.txt", ios::in | ios::out);
if (!plik.is_open())
{
cout<<"plik nie zostal otwarty";
} else
{
ifstream src("zmiana.txt", ios::binary);
ofstream dst("working", ios::binary);
dst << src.rdbuf();
}
fstream plik2;
plik2.open("working", ios::in | ios::out );
while (getline(plik2,fraza))
{
plik<<fraza<<endl<<endl;
}
plik.close();
plik2.close();
remove("working");
return 0;
}