Попытка записать в один файл, используя 2 функции

У меня есть проект, который требует, чтобы я печатал данные в выходном файле, используя две функции. Одна функция печатает значения вектора, а другая — значения массива. Однако вторая функция, вызываемая в main, перезаписывает любую напечатанную первую функцию. Я попытался открыть файл в первой функции и закрыть его во второй, но это не сработало. Видимо, когда вы переходите от функции к функции, позиция записи сбрасывается в начало файла. Однако я не могу использовать seekp (); так как мы на самом деле не освещали это в классе. Любое понимание того, как я должен это сделать?

void writeToFile(vector<int> vec, int count, int average)
{
ofstream outFile;

outFile.open("TopicFout.txt");

// Prints all values of the vector into TopicFout.txt
outFile << "The values read are:" << endl;
for (int number = 0; number < count; number++)
outFile << vec[number] << "  ";

outFile << endl << endl << "Average of values is " << average;

}

void writeToFile(int arr[], int count, int median, int mode, int countMode)
{
ofstream outFile;

// Prints all values of the array into TopicFout.txt
outFile << "The sorted result is:" << endl;
for (int number = 0; number < count; number++)
outFile << arr[number] << "  ";

outFile << endl << endl << "The median of values is " << median << endl << endl;

outFile << "The mode of values is " << mode << " which occurs " << countMode << " times." << endl << endl;

outFile.close();
}

0

Решение

использование outFile.open("TopicFout.txt", ios_base::app | ios_base::out); вместо просто outFile.open("TopicFout.txt");

1

Другие решения

Как предложил Роджер в комментариях, вы можете передать ofstream к функциям, использующим указатель по ссылке.

Самый простой способ — передать его по ссылке. Таким образом, вы объявляете и инициализируете, если хотите, ofstream по вашей основной функции:

ofstream outFile;               // declare the ofstream
outFile.open("TopicFout.txt");  // initialize
...                             // error checking
...                             // function calls
outFile.close();                // close file
...                             // error checking

Ваша первая функция может выглядеть так:

void writeToFile(ofstream& outFile, vector<int> vec, int count, int average)
{
// Prints all values of the vector into TopicFout.txt
outFile << "The values read are:" << endl;
for (int number = 0; number < count; number++)
outFile << vec[number] << "  ";

outFile << endl << endl << "Average of values is " << average;

}

Если вы используете C ++ 11 Соответствующий компилятор, он также должен быть в порядке, чтобы передать ofstream так:

void writeToFile(std::ofstream outFile, vector<int> vec, int count, int average) {...}

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

1

По вопросам рекламы [email protected]