Ошибка вывода в консоль, непонятные символы, 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;
}