Почему выводит непонятные символы в консоли?
Есть 2 схожих кода. Отличие только в том, что в первом случае - это Список, а во втором Хештаблица. В хештаблице 1 аргумент- это число int, второй - это класс student. В списке это только класс student. Вот код:
Класс Student:
#pragma once
#include <iostream>
using namespace std;
class student
{
private:
string name;
int age;
string parol;
string clas;
string dateBirth;
public:
student(string name_m, int age_m, string class_m,string dateBirth);
~student() {};
friend ostream& operator<< (std::ostream& out, const student& strudent_m);
};
#include "Student.h"
student::student (string name_m, int age_m, string class_m, string dateBirth_m)
{
this->name = name_m;
this->age = age_m;
this->clas = class_m;
this->dateBirth = dateBirth_m;
}
ostream& operator<< (std::ostream& out, const student& strudent_m)
{
out << strudent_m.name << endl;
out << strudent_m.dateBirth << endl;
out << strudent_m.age << endl;
out << strudent_m.clas<< endl;
return out;
}
Само создание списка и хештаблицы и инициализация:
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
ifstream in("test.txt");
map <int, student> map1;//Хэштаблица
while (!in.eof())
{
string name_m;
getline(in, name_m);
int hashParol_m;
in >> hashParol_m;
in.ignore(20, '\n');
int age_m;
in >> age_m;
in.ignore(20, '\n');
string clas_m;
getline(in, clas_m);
string birthday_m;
getline(in, birthday_m);
student a1(name_m, age_m, clas_m, birthday_m);
map1.emplace(hashParol_m, a1);
}
student a2("Никита Хува", 15, "7Б","15.03.2001");
map1.emplace(213, a2);
map<int, student> ::iterator it = map1.begin();
for (it = map1.begin(); it != map1.end(); it++)
{
cout << (it->first) << endl;
cout << it->second << endl;
}
ifstream ina("StudentRegistrationList.txt");
list <student> list1;//Список
while (!ina.eof())
{
string name_m;
getline(ina, name_m);
int age_m;
ina >> age_m;
ina.ignore(20, '\n');
string clas_m;
getline(ina, clas_m);
string birthday_m;
getline(ina, birthday_m);
student a1(name_m, age_m, clas_m, birthday_m);
list1.push_back(a1);
}
list <student> ::iterator its = list1.begin();
for (its = list1.begin(); its != list1.end(); its++)
{
cout << (*its);
}
}
Вот 2 файла, которые я читаю:
При отладке в консоль выводит вот эту вод белеберду, как видите я добавил еще 1 элемент в хештаблицу и он вывелся без проблем. А те, которые были прочитаны с файла почему то не хочет понимать русский текст, хотя использовал в начале :
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Как можно обойти или что нужно сделать? Не совсем понимаю в чем ошибка. А да, пробовал отлаживать код поэтапно, он сразу в переменную name_m записывает вот эту белеберду
Ответы (1 шт):
Потому что файл в UTF8, а ты его читаешь и выводишь как 1251.
Проще будет пересохранить файл в 1251.


