#c
#c
Вопрос:
Мне нужно взять данные из файла, а затем сохранить их в строке, после сохранения в строке я хочу поместить данные в тот же файл, откуда я получаю эти данные.ПРОБЛЕМА в том, что при извлечении данных не определяется моя новая строка. Давайте посмотрим пример.
У меня есть файл «check.txt » в котором данные выглядят следующим образом: ABC новая строка DEF новая строка XYZ новая строка
Теперь я хочу снова отправить те же данные в файл, но вместо отправки тех же данных он отправляет их следующим образом: ABC DEF XYZ.
Как я могу добавить обратно в формате номер 1?
Вот код, который я пробовал:
#include<iostream>
#include<fstream>
using namespace std;
void abc()
{
ifstream fin("check.txt");
string line,line1;
while (fin)
{
getline(fin,line);
line1.append(line.begin(),line.end());
}
fin.close();
ofstream fout;
fout.open("check.txt");
while (fout)
{
{
fout<<line1<<endl;
// fout<<"done"<<endl;
cout<<"done"<<endl;
}
break;
}
fout.close();
}
int main()
{
abc();
}
Ответ №1:
Билай.
Попробуйте это:
Пока ваша программа получает каждую строку, запишите ее в stringstream, используя тот же цикл:
void abc()
{
ifstream fin("check.txt");
string line;
stringstream out;
while (fin)
{
getline(fin, line);
out << line << 'n'; //use character 'n' instead of endl, to avoid flushing the stream every loop.
}
fin.close();
ofstream fout;
fout.open("check.txt");
fout << out.str();
fout.close();
}
Комментарии:
1. Зачем использовать
endl
? Вам не нужно очищать выходные данные на каждой итерации цикла.2. функция
getline
восстанавливает строку без символа новой строки, в этом проблема этого ответа.endl
вставляет символ новой строки вstringstream
но, как вы сказали,endl
сбрасывает строку в строковый буфер и делает ее (программу) менее эффективной, чем использование'n'
. Я изменю свой ответ. Спасибо за замечание.
Ответ №2:
Когда getline считывает строку, он отбрасывает символ новой строки. Вам нужно будет повторно вставить символы новой строки при добавлении line
к line1
.
Комментарии:
1. Возникает вопрос, как это вставить?
2. @Bilal
line1 = line 'n';
?