Задача состоит в том, чтобы ввести данные на русском языке. Вопрос в том, как это правильно делать, и почему происходит ошибка(см. изображения).
проблемная область кода:
#include <iostream>
using namespace std;
const unsigned int arr_size = 2; // array size
const unsigned int str_len = 80;
int i;
struct marsh {
char start[str_len];
char finish[str_len];
unsigned int index;
} list[arr_size];
int main() {
setlocale(LC_ALL, "Rus");
// input
for (i = 0; i < arr_size; i++)
{
cout << "====================================" << endl
<< "\tдобавление записи " << i + 1 << endl
<< "номер маршрута = ";
cin >> list[i].index;
cout << "начальный пункт = ";
cin.getline(list[i].start, str_len);
cout << "конечный пункт = ";
cin.getline(list[i].finish, str_len);
}
cout << "====================================" << endl;
}
изображение результата при запуске
снимок1
снимок2
полный код программы#include <iostream>
using namespace std;
const unsigned int arr_size = 2; // array size
const unsigned int str_len = 80;
int i;
struct marsh {
char start[str_len];
char finish[str_len];
unsigned int index;
} list[arr_size];
int main() {
setlocale(LC_ALL, "Rus");
// input
for (i = 0; i < arr_size; i++)
{
cout << "====================================" << endl
<< "\tдобавление записи " << i + 1 << endl
<< "номер маршрута = ";
cin >> list[i].index;
cout << "начальный пункт = ";
cin.getline(list[i].start, str_len);
cout << "конечный пункт = ";
cin.getline(list[i].finish, str_len);
}
cout << "====================================" << endl;
//sorting
marsh temp;
for (i = 0; i < arr_size - 1; i++)
for (int j = 0; j < arr_size - i - 1; j++)
if (list[j].index > list[j + 1].index) {
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
// output
unsigned int number;
cout << endl << "введите номер маршрута, который хотите просмотреть" << endl
<< "номер = ";
cin >> number;
bool not_in_list = true;
for (i = 0; i < arr_size; i++)
{
if (list[i].index == number)
{
cout << "\nмаршрут номер " << list[i].index << " из начального пункта \"" << list[i].start
<< "\" в конечный пункт \"" << list[i].finish << '\"' << endl << endl << endl;
not_in_list = false;
break;
}
}
if (not_in_list) cout << "извините, но данного маршрута в записях нет" << endl << endl << endl;
system("Pause");
return 0;
}
P. S. в общем интересно узнать мнение о коде, так что если не лень отпишите пожалуйста, насколько всё плохо.
как вводить русский текст на windows 10 без использования windows.h?