C++ fstream : Не могу записать в файл
У меня есть файл myFile.txt, который содержит числа вроде 1 2 3 4 6. Мне нужно поменять местами максимальное и минимальное значения с помощью fstream. Это моя функция.
void File26() {
stack<int> numbers;
fstream fs;
fs.open("myFile.txt", fstream::in | fstream::out);
if (!fs.is_open()) {
cout << "can't open file myFile.txt" << endl;
} else {
int min;
int max;
int i_min = 0;
int i_max = 0;
int i = 0;
while (!fs.eof()) {
string s;
fs >> s;
int x = stoi(s);
numbers.push(x);
if (i == 0) {
min = x;
max = x;
} else {
if (x < min) {
swap(x, min);
i_min = i;
}
if (x > max) {
swap(x, max);
i_max = i;
}
}
i++;
}
i = numbers.size();
while (!numbers.empty()) {
int x = numbers.top();
i--;
numbers.pop();
if (i == i_min) {
x = max;
}
if (i == i_max) {
x = min;
}
cout << x << ", " << endl;
fs << x << " ";
}
}
fs.close();
}
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Т.к. вы уже дошли до конца файла, то под конец произошла ошибка чтения, а так же указатель в файле стоит в конце файла.
Чтобы избавится от метки ошибки воспользуйтесь функцией clear
А чтобы вернуть указатель в начало файла функция seekp
Вот пример кода:
fs.clear();
fs.seekp(0, ios::beg);
while (!numbers.empty()) {
....
}
Так же не моё дело конечно, но заметьте, что в файл будут записаны числа в обратном порядке, если вам этого не нужно, то можете использовать структуру vector<int> numbers;