C/C++

Помогите решить задачку по теме работа с файлами C++

Пользователь вводит имя файла и номер строки.
Сначала выводиться содержимое файла.
Если номер строки не превосходит количество строк файла, то
= пользователю разрешают ввести строку, которая заменит соответсвующую строку в файле.
Потом выводиться новое содержимое файла.
При закрытии программы, новое содержимое должно остаться в исходно изменяемом файле.
HM
Hovik Mneyan
23
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <limits>
#include <cstdlib>
using namespace std;
template<typename T>
T input(const char* msg) {
cout << msg;
T value;
cin >> value;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
return value;
}
vector<string> load(const string& path) {
vector<string> text;
ifstream inp(path);
if (inp.is_open()) {
string line;
while (getline(inp, line)) text.emplace_back(line);
inp.close();
}
return text;
}
bool save(const string& path, const vector<string>& text) {
ofstream out(path);
if (out.is_open()) {
for (const auto& line : text) out << line << '\n';
out.close();
return true;
}
return false;
}
void show(const vector<string>& text) {
for (const auto& line : text) cout << line << '\n';
puts("");
}
int main() {
system("chcp 1251 > nul");
vector<string> text;
string filename;
while (text.empty()) {
filename = input<string>("Имя файла: ");
text = load(filename);
if (text.empty()) {
puts("Путь к файлу не найден либо файл не содержит текст!");
}
}
auto number = 0U;
while (!number) {
number = input<unsigned>("Номер строки: ");
if (!number) {
puts("Отсчёт строк начинается с единицы!");
}
}
show(text);
if (number <= text.size()) {
cout << "Введите строку: ";
string line;
getline(cin, line);
text[number - 1] = line;
show(text);
save(filename, text);
} else {
puts("Заданная строка в файле не существует!");
}
system("pause > nul");
}
ПК
Павел Крупель
86 816
Лучший ответ