Ошибка вывода в консоль, непонятные символы, C++

Столкнулся с такой проблемой, что при записи в файл, например слово "Привет" и потом когда я его считываю и вывожу выводит вот такое: ЇаЁў?в

#include <iostream>
#include <fstream>
#include <string>
#include <locale> // Добавляем заголовочный файл для работы с русским языком

// Функция для ввода строки с клавиатуры и записи в файл
void InputAndWriteToFile(const std::string& filename) {
    std::ofstream file(filename);
    if (!file.is_open()) {
        std::cerr << "Ошибка открытия файла для записи." << std::endl;
        return;
    }

    std::string input;
    std::cout << "Введите строку для записи в файл: ";
    std::getline(std::cin, input);

    file << input;
    file.close();
}

// Функция для чтения строки из файла и вывода на экран
void ReadFromFileAndPrint(const std::string& filename) {
    std::ifstream file(filename);
    if (!file.is open()) {
        std::cerr << "Ошибка открытия файла для чтения." << std::endl;
        return;
    }

    std::string content;
    std::getline(file, content);
    file.close();

    std::cout << "Прочитанная строка: " << content << std::endl;
}

// Функция для шифрования строки и записи в файл
void EncryptAndWriteToFile(const std::string& filename) {
    std::ifstream file(filename);
    if (!file.is_open()) {
        std::cerr << "Ошибка открытия файла для чтения." << std::endl;
        return;
    }

    std::string content;
    std::getline(file, content);
    file.close();

    // Заменяем пары букв согласно правилам
    size_t pos;
    while ((pos = content.find("ле")) != std::string::npos) {
        content.replace(pos, 2, "ю");
    }
    while ((pos = content.find("са")) != std::string::npos) {
        content.replace(pos, 2, "щ");
    }
    while ((pos = content.find("ик")) != std::string::npos) {
        content.replace(pos, 2, "ж");
    }

    std::ofstream encryptedFile(filename);
    if (!encryptedFile.is_open()) {
        std::cerr << "Ошибка открытия файла для записи." << std::endl;
        return;
    }

    encryptedFile << content;
    encryptedFile.close();
}

// Функция для расшифрования строки и записи в файл
void DecryptAndWriteToFile(const std::string& filename) {
    std::ifstream file(filename);
    if (!file.is_open()) {
        std::cerr << "Ошибка открытия файла для чтения." << std::endl;
        return;
    }

    std::string content;
    std::getline(file, content);
    file.close();

    // Заменяем обратно согласно правилам
    size_t pos;
    while ((pos = content.find("ю")) != std::string::npos) {
        content.replace(pos, 2, "ле");
    }
    while ((pos = content.find("щ")) != std::string::npos) {
        content.replace(pos, 2, "са");
    }
    while ((pos = content.find("ж")) != std::string::npos) {
        content.replace(pos, 2, "ик");
    }

    std::ofstream decryptedFile(filename);
    if (!decryptedFile.is_open()) {
        std::cerr << "Ошибка открытия файла для записи." << std::endl;
        return;
    }

    decryptedFile << content;
    decryptedFile.close();
}

// Главная функция меню
int main() {
    const std::string filename = "data.txt";
    int choice;
    setlocale(LC_ALL, "Russian_Russia.1251"); // Установка локали для работы с русским языком

    do {
        std::cout << "Меню программы:" << std::endl;
        std::cout << "1 – Сформировать с клавиатуры строку и записать в файл" << std::endl;
        std::cout << "2 – Считать строку из файла и распечатать" << std::endl;
        std::cout << "3 – Зашифровать строку и записать в файл" << std::endl;
        std::cout << "4 – Расшифровать строку и записать в файл" << std::endl;
        std::cout << "5 – Выход" << std::endl;
        std::cout << "Выберите действие (1-5): ";
        std::cin >> choice;
        std::cin.ignore(); // Очистка буфера ввода

        switch (choice) {
        case 1:
            InputAndWriteToFile(filename);
            break;
        case 2:
            ReadFromFileAndPrint(filename);
            break;
        case 3:
            EncryptAndWriteToFile(filename);
            break;
        case 4:
            DecryptAndWriteToFile(filename);
            break;
        case 5:
            std::cout << "Программа завершена." << std::endl;
            break;
        default:
            std::cout << "Неверный выбор. Попробуйте еще раз." << std::endl;
        }
    } while (choice != 5);

    return 0;
}

Ответы (0 шт):