Руссификация консоли в с - C (СИ)
Формулировка задачи:
Не работает руссификация консоли в си. Как сделать вывод кирилицу?
// Функция перекодировки в кирилицу
char* rus(char* st)
{
unsigned char* p = st; // при объявлении символов как char русские буквы
// кодируются отрицательными числами
while( *p ){
if(*p >= 192) // здесь русская буква
if(*p <= 239)
*p -= 64;
else
*p -= 16;
p++;
}
return st;
}int main() {
hout = GetStdHandle(STD_OUTPUT_HANDLE); //хэндл экрана консоли
printHome();
printLifts();
go();
return 0;
}
void go() {
int i = 0;
int N;
DWORD kl;
isClosed2 = 1;
isClosed1 = 1;
//Да будут же лифты пустыми!
for (i = 0; i < 4; i++) {
consist2[i] = 0;
consist1[i] = 0;
}
for (i = 0; i < 6; i++) {
m2[i] = 0;
m1[i] = 0;
}
//Начальное положение лифтов
current2 = 1;
current1 = 1;
do {
int j;
COORD k;
//Пишем надпись
k.X = 40;
k.Y = 8;
char a[50];
SetConsoleCursorPosition(hout, k);
printf(rus(" Введите любое число до 10 "));
scanf("%d", &N);
//Создаем семафоры для всех этажей
for (j = 0; j < 10; j++)
for (i = 0; i < N + 1; i++) //создание семафора очереди
{
hQueue2[j][i] = CreateMutex(NULL, FALSE, NULL);
hQueue1[j][i] = CreateMutex(NULL, FALSE, NULL);
}
for (i = 0; i < N; i++) //запуск нитей-"людей"
{
hPeoples[i] = CreateThread(NULL, 4096, Chel, NULL, 0, &kl);
Sleep(500);
}
LiftEvent2 = CreateThread(NULL, 4096, LiftListiner, NULL, 0, &kl);
LiftEvent1 = CreateThread(NULL, 4096, LiftListiner, NULL, 0, &kl);
//printf("dddD!");
getch();
} while (N > 0); //для бесконечной работы проги
}Решение задачи: «Руссификация консоли в с»
textual
Листинг программы
SetConsoleCP(1251); SetConsoleOutputCP(1251);
Объяснение кода листинга программы
SetConsoleCP— функция, которая устанавливает кодировку консоли на стандартную кодировку символов Windows (CP-1251).SetConsoleOutputCP— функция, которая устанавливает кодировку вывода на консоль на стандартную кодировку символов Windows (CP-1251).