У меня есть функция, которая читает из текстового файла и выводит весь текстовый файл.
Похоже на это;
string FileInteraction :: read() const
{
ifstream file;
string output;
string fileName;
string line;
string empty = "";fileName = getFilename();
file.open(fileName.c_str());
if(file.good())
{
while(!file.eof())
{
getline(file, line);
output = output + line ;
}
file.close();
return output;
}
else
return empty;
};
Я называю эту функцию вот так;
cout << FI.read(); //PS I cant change the way it's called so I can't simply put an endl here
если я использую
вернуть вывод + «\ n»
я получаю это как вывод
-- Write + Read --
This is the first line. It should disappear by the end of the program.
-- Write + Read --
This is another line. It should remain after the append call.
This call has two lines.
Я не хочу, чтобы это расстояние между строками было там.
Поэтому после вызова функции мне нужно закончить строку.
Как я могу сделать это в функции?
PS. Также, если есть лучший способ вывести все в текстовом файле, чем то, как я это сделал, я был бы признателен за любые предложения.
Просто поменяй
return output;
в
return output + "\n";
Это:
Поэтому после вызова функции мне нужно закончить строку. Как может
Я делаю это внутри функции?
бессмысленно. Вы не можете ничего сделать внутри функции, которая должна произойти после вызова функции. Если вызывающий код не отправляется std::endl
в cout
когда это предполагается, это проблема вызывающего кода, вы не можете — и не должны — пытаться исправить эту проблему в своей функции.
Упрощенная:
std::string fileName = getFilename();
std::ifstream file(fileName.c_str());
std::string output;
std::string line;
while (getline(file, line))
output.append(line);
output.append(1, '\n');
return output;
просто вернись output + '\n'
вместо просто output
,
'\n'
код перехода для символа новой строки.