У меня есть проект, который требует, чтобы я печатал данные в выходном файле, используя две функции. Одна функция печатает значения вектора, а другая — значения массива. Однако вторая функция, вызываемая в 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();
}
использование outFile.open("TopicFout.txt", ios_base::app | ios_base::out);
вместо просто outFile.open("TopicFout.txt");
Как предложил Роджер в комментариях, вы можете передать 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 такого определения нет.