На начальных этапах программирования многие новички сталкиваются с такой проблемой: они в коде пишут какое-либо сообщение на русском языке для консоли (например, используя printf), но при запуске программы вместо русских слов появляются какие-то непонятные знаки. Покажем, как избавиться от этой проблемы.
Например, при запуске вот этой программы:
1 2 3 4 5 6 7 8 9 |
#include "stdafx.h" #include <conio.h> int _tmain(int argc, _TCHAR* argv[]) { printf("Всем привет! Как дела?"); _getch(); return 0; } |
В консоли будет отображено следующее:
Всё дело в том, что мы не подключили русскую локализацию.
Исправить эту ошибку очень легко!
Для начала надо добавить следующую библиотеку:
1 |
#include <locale.h> |
Она отвечает за локализацию.
А затем нам надо просто написать в начале тела кода вот эту строку:
1 |
setlocale(LC_ALL, "Rus"); |
Функция setlocale задаёт локализацию программы. По умолчанию это только английский язык.
LC_ALL указывает программе, что локализированы будут все функции.
«Rus», как легко догадаться говорит о том, что локализация произойдёт на русский язык.
Вот и всё! Мы включили русский язык в Си. Наша программа модернизирована и обогащена на две строки. Теперь она будет выглядеть вот так:
1 2 3 4 5 6 7 8 9 10 11 |
#include "stdafx.h" #include <conio.h> #include <locale.h> int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "Rus"); printf("Всем привет! Как дела?"); _getch(); return 0; } |
А консоль вот так:
Поделиться в соц. сетях:
Не работает
Что именно? Какая ошибка?
Можете попробовать такой код:
#include < locale.h >
#include < stdio.h >
#include < conio.h >
int main()
{
setlocale(LC_ALL, «Rus»);
printf(«Всем привет! Как дела?»);
getch(); //В Visual Studio _getch();
return 0;
}
Этот вариант работает, но он не включает русский язык в стандартном потоке ошибок.
Вместо одних каракулей появились другие. Но никаких ошибок не выдает.
Здравствуйте, Евгений. Существует ещё один способ включения русского языка в Си. Попробуйте использовать следующий код:
#include < Windows.h >
#include < stdio.h >
#include < conio.h >
int main()
{
SetConsoleCP(1251); //установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251); //установка кодовой страницы win-cp 1251 в поток вывода
printf(«Всем привет! Как дела?»);
_getch();
return 0;
}
Здравствуйте, использовала такой метод как в статье.
Все работает при выводе текста функцией printf.
Но, когда я считываю слово функцией scanf, а потом вывожу его функцией printf появляются снова непонятные символы.
Подскажите пожалуйста как это можно исправить.
Здравствуйте! Чуть выше в комментариях приводятся ещё два способа, как включить русский язык в Си. Попробуйте их, должно сработать.
У меня та же проблема, с printf всё работает, но вот если ввести при scanf, то в выводе printf будут кракозябры
Попробуйте способы, указанные в комментариях выше. Один из них точно сработает.
Спасибо за инфу! Все работает.
Всё работает! Спасибо большое!
Правильно «Ru», а не «Rus».
setlocale(LC_ALL, «Ru»);
у меня получилось так:
#include
#include
#include
void main()
{
setlocale(LC_ALL, «Rus»);
wprintf(L»Спасибо»);
}
Если кто-то пишет в NotePad++ или чём-то подобном, не забудьте поменять кодировку самого файла с UTF-8 на, например, Windows-1251.
Спасибо за статью.
Лучший, спасибо!