3

У меня есть файл 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();

}

  • In Console it works, but when I try to write something in the file it doesn't work – Arman Yavryan Dec 22 '20 at 08:10
  • 1
    Да что ж за напасть - while (!fs.eof())... В каком-то учебнике кто-то такую ерунду написал, что ли?... https://ru.stackoverflow.com/q/833980/195342 – Harry Dec 22 '20 at 08:21

1 Answers1

1

Т.к. вы уже дошли до конца файла, то под конец произошла ошибка чтения, а так же указатель в файле стоит в конце файла.

Чтобы избавится от метки ошибки воспользуйтесь функцией clear

А чтобы вернуть указатель в начало файла функция seekp

Вот пример кода:

fs.clear();
fs.seekp(0, ios::beg);
while (!numbers.empty()) {
    ....        
}

Так же не моё дело конечно, но заметьте, что в файл будут записаны числа в обратном порядке, если вам этого не нужно, то можете использовать структуру vector<int> numbers;

  • спасибо, буду изучать поподробнее. – Arman Yavryan Dec 22 '20 at 15:58
  • @ArmanYavryan пожалуйста примите мою правку, в которой я перевел ваш вопрос (если конечно вас удовлетворяет перевод) и можете пожалуйста принять ответ если он так же вас удовлетворяет :) это делается для того, что если у кого нибудь возникнет такая же проблема, то он сразу сможет найти ответ. – Павел Ериков stand with Russia Dec 22 '20 at 17:16