Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
0 / 0 / 0
Регистрация: 29.10.2024
Сообщений: 2

Консоль С++ в Visual Studio не выводит на русском

16.03.2025, 12:41. Показов 4726. Ответов 36
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
когда ввожу имя мальчика, то выводит непонятные символы. помогите, пожалуйста. уже во все функции вставила сетлокал даже, толку 0

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <string>
using namespace std;
 
struct children
{
    string name;
    char gen;
    double height;
} kids[20];
 
void inputChildrenData() // ввожу информацию
{
    setlocale(LC_ALL, "RUS");
    for (int i = 0; i < 20; i++)
    {
        cout << "Введите информацию для ребенка: " << i + 1 << endl;
        cout << "Имя: ";
        cin >> kids[i].name;
        cout << "Пол (m/f): ";
        cin >> kids[i].gen;
        cout << "Рост: ";
        cin >> kids[i].height;
    }
}
 
void findTallestBoy(string& tallestBoyName)// Функция для поиска самого высокого мальчика (результат через параметр)
{
    setlocale(LC_ALL, "RUS");
    double maxHei = 0.0;
    tallestBoyName = ""; // Инициализация пустой строкой
    for (int i = 0; i < 20; i++)
    {
        if (kids[i].gen == 'm')
        {
            if (kids[i].height > maxHei)
            {
                maxHei = kids[i].height;
                tallestBoyName = kids[i].name;
            }
        }
    }
}
 
void calculateAverageHeight(double& averageHeight)// Функция для вычисления среднего роста мальчиков (результат через параметр)
{
    setlocale(LC_ALL, "RUS");
    double totalHei = 0.0;
    int znachBoys = 0;
    for (int i = 0; i < 20; i++)
    {
        if (kids[i].gen == 'm')
        {
            totalHei += kids[i].height;
            znachBoys++;
        }
    }
    if (znachBoys > 0)
    {
        averageHeight = totalHei / znachBoys;
    }
    else
    {
        averageHeight = 0.0; //Инициализация на 0,0
    }
}
 
void printBoysBelowAverageHeight(double sredHei)// Функция для вывода мальчиков с ростом ниже среднего
{
    setlocale(LC_ALL, "RUS");
    cout << "Мальчики с ростом ниже среднего: " << endl;
    for (int i = 0; i < 20; i++)
    {
        if (kids[i].gen == 'm' && kids[i].height < sredHei)
        {
            cout << kids[i].name << endl;
        }
    }
}
 
int main()
{
 
    setlocale(LC_ALL, "RUS");
    inputChildrenData(); //вызывается эта функция, в которой информация о детях
    string tallestBoyName; //Объявляется переменная tallestBoyName типа string, в ней хранится имя высокого мальчика 
    findTallestBoy(tallestBoyName); //Вызывается эта функция в ней находим самого высокого мальчика. он сохранится в переменной в скобках tallestBoyName
    if (tallestBoyName != "")
    {
        cout << "Самый высокий мальчик: " << tallestBoyName << endl;
    }
    else
    {
        cout << "Нет данных о мальчиках." << endl;
    }
    double averageHeight;
    calculateAverageHeight(averageHeight); // Вызывается эта функция, она считает средний рост, он сохранится в переменной в скобках averageHeight
 
    if (averageHeight > 0.0)
    {
        cout << "Средний рост мальчиков: " << averageHeight << endl;
    }
    else
    {
        cout << "Нет данных о мальчиках." << endl;
    }
    if (averageHeight > 0.0)
    {
        printBoysBelowAverageHeight(averageHeight); // Вызывается эта, она выводит имена мальчиков ростом ниже среднего, они сохраняются в averageHeight.
    }
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2025, 12:41
Ответы с готовыми решениями:

Вывод текста любым цветом в Microsoft Visual Studio 2005 (Win32 Console application)
подскажите пожалуйста существует ли способ выводить текст любым цветом в Microsoft Visual Studio 2005 (Win32 Console application)

русский язык в командной строке visual studio x64
Здравствуйте, знаю проблема не новая, но у меня почему то если компилить файл через саму IDE, приписывая в мейне setlocale(LC_ALL,...

Visual Studio 2008, WinAPI - Вывод изображения
Как вывести изображение на форму? В гугле искал, но там что-то ничего того,что я могу понять не нашёл =( Понял только , что...

36
 Аватар для CoderHuligan
1753 / 1018 / 257
Регистрация: 30.06.2015
Сообщений: 5,130
Записей в блоге: 56
16.03.2025, 15:32
C++
1
#include <locale.h>
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 17:22
https://www.cyberforum.ru/post14609532.html
0
 Аватар для CoderHuligan
1753 / 1018 / 257
Регистрация: 30.06.2015
Сообщений: 5,130
Записей в блоге: 56
16.03.2025, 17:28
У меня её код нормально вводит и выводит русские символы. Visual Studio.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 17:34
CoderHuligan, потому что у тебя система православная.
У меня выводятся вопросительные знаки, причем твой сишный хидер, как и ожидалось, не решает проблему

По сути, пост DrOffset о том, что лучше кириллицу выбросить в мусорку и писать латинскими буквами.

Самое адекватное решение - это поставить эту галочку



После этого можно отправить на помойку все локали и прочие велосипеды, а код писать хоть на китайском. Но этот метод может ломать некоторые старые программы.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 17:48
Цитата Сообщение от Royal_X Посмотреть сообщение
По сути, пост DrOffset о том, что лучше кириллицу выбросить в мусорку и писать латинскими буквами.
Что??
Мой пост минимум о том, что нужно использовать юникод.

А максимум он о том, как все это в принципе работает. Когда понимаешь как работает, то находить решения проще.
Это гораздо лучше, чем наобум вставлять во все места setlocale.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 17:59
Цитата Сообщение от DrOffset Посмотреть сообщение
Это гораздо лучше, чем наобум вставлять во все места setlocale.
локали вообще мусор, их вообще не нужно использовать
на mingw они вообще не работают и на этом форуме я даже показывал. там они вообще не соответствуют документации.
Цитата Сообщение от DrOffset Посмотреть сообщение
Мой пост минимум о том, что нужно использовать юникод.
речь о версии юникода, а именно, что если всё дошло до того, чтобы использовать UTF-16, то лучше забросить программирование и пойти в онлифанс
На винде UTF-16 хорош. Но ТС пишет платформонезависимый код. Придется писать велосипед под разные ОС...
И вообще, UTF-8 самый лучший вариант. Символы занимают от 1 до 4 байта, тогда как у UTF-16 либо 2, либо 4. Выделять под ASCII символ 2 байта это нехорошо. К тому же, UTF-8 хорош и для сети. Не нужно переживать из-за порядка байтов, BE, LE, мэ....
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 18:03
Royal_X, извини, ты наверное хотел написать "сори, я не прочитал, что написано в твоем посте и переврал его смысл"?
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 18:14
DrOffset, я про то, что

C++
1
2
_setmode(_fileno(stdout), _O_U16TEXT);
_setmode(_fileno(stdin), _O_U16TEXT);
это велосипед для винды (а именно для MSVC, поскольку на mingw не работает) и не может являться нормальным решением

ТС пишет на С++, а не WinAPI

Цитата Сообщение от DrOffset Посмотреть сообщение
извини
я извинюсь, если ты напишешь для ТС чистый платформо-независимый код на С++ для работы с кириллицей.
Это будет есесена велосипед, но хотя бы с шимано.

DrOffset, почему я всё это говорю? Немного контекста: на форуме есть тема на 1001 страницу о том, как решить проблему с кириллицей для С++. Так вот, ни одного нормального метода там нет, все работают коряво.
Поэтому, я прихожу к выводу, что кириллицу нужно выбросить в мусорку и писать только ASCII символами.

Т.е. для работы с кириллицей на С++ нет нормального универсального метода. Приходется написать кроссплатформенный велосипед. А еще лучше использовать wxWidgets, Qt и прочий фреймворк, которые нормально работают с UTF-8. Но это уже не будет чистый С++ код.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 18:15
Royal_X, наверное тебе стоит прочитать дальше первого абзаца.
Главный посыл моего поста - это дать разъяснения, почему бездумное добавление setlocale не работает.

Цитата Сообщение от Royal_X Посмотреть сообщение
а не WinAPI
На самом деле функция setmode не имеет никакого отношения к WinAPI. Она присутствует во многих системах, в том числе и UNIX-подобных.

Windows использует для юникода UTF-16. От этого никуда не деться, это придется учитывать.

И тебе стоит понять, что я даю общую информацию, а не рекомендацию к действию. Я озвучил факт: "UTF-8 в бете, UTF-16 - основная кодировка, поддержка всех остальных кодировок достигается путем преобразования". Что делать с этими фактами, готовым ли вы мириться с преобразованиями, готовы ли вы мириться с бетой UTF-8, нужна ли вам кроссплатформенность, и т.д. - это сугубо ваше дело. Ясно?
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 18:21
Цитата Сообщение от DrOffset Посмотреть сообщение
Ясно?
Мне пока ясно, что если пишется код на С++, то кириллицу можно использовать только в комментариях)))
Либо придется попрощаться с чистым С++ и писать либо платформозависимый код, либо использовать кроссплатформенный фреймворк.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 18:30
Цитата Сообщение от Royal_X Посмотреть сообщение
я извинюсь, если ты напишешь для ТС чистый платформо-независимый код на С++ для работы с кириллицей.
Любой такой код вынужден будет выделить абстракции, реализация которых будет платформо-зависимой.
Твой подход с галочкой в настройках - тоже платформо-зависимый. Если галочка не установлена, или если версия винды ниже Windows 10, то работать это не будет.

Вот например Qt - это кроссплатформенный фреймворк, но в реализации его множество платформозависимых кусков, которые подключаются в зависимости от используемой системы.

Например вот тут я написал класс буфера стандартного потока.
Если спрятать этот класс куда-то в библиотеку, то создастся впечатление, что у нас чистый, платформонезависимый код.

Добавлено через 3 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
Мне пока ясно, что если пишется код на С++, то кириллицу можно использовать только в комментариях)))
Если пишется полноценный, серьезный проект на C++, то кириллица должна быть в файлах\ресурсах перевода. В исходниках кириллицы быть не должно.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 18:31
Цитата Сообщение от DrOffset Посмотреть сообщение
Любой такой код вынужден будет выделить абстракции, реализация которых будет платформо-зависимой.
что подтверждает мое утверждение, что кириллицу использовать на чистом С++ не получится. Я это говорю на форуме уже давно, уже устал повторять, меня даже в русофобии обвиняли, хотя нет даже связи между кириллицей и русофобией...
Цитата Сообщение от DrOffset Посмотреть сообщение
Твой подход с галочкой в настройках - тоже платформо-зависимый.
Согласен, и я обратного никогда и не утверждал. Я всего лишь эту галку предложил как быстрый метод для избавления от мук на винде. И даже намекнул на побочные эффекты.
Цитата Сообщение от DrOffset Посмотреть сообщение
то создастся впечатление, что у нас чистый, платформонезависимый код.
у меня не создастся)
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 18:34
Цитата Сообщение от Royal_X Посмотреть сообщение
Qt и прочий фреймворк, которые нормально работают с UTF-8
Просто для справки: В Qt, QString внутри хранит UTF-16.
QString stores a string of 16-bit QChars, where each QChar corresponds to one UTF-16 code unit. (Unicode characters with code values above 65535 are stored using surrogate pairs, that is, two consecutive QChars.)
https://doc.qt.io/qt-6/qstring.html
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 18:35
Цитата Сообщение от DrOffset Посмотреть сообщение
Если пишется полноценный, серьезный проект на C++, то кириллица должна быть в файлах\ресурсах перевода. В исходниках кириллицы быть не должно.
Не ну серьезный проект, тем более с переводами, я напишу на каком-нибудь фреймворке, например, Qt, а там есть tr()
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 18:36
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня не создастся)
Потому что ты очень хочешь со мной поспорить?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
16.03.2025, 18:36
Цитата Сообщение от Royal_X Посмотреть сообщение
это велосипед для винды (а именно для MSVC, поскольку на mingw не работает)
Ну чо ты врёшь-то?!
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 18:39
Цитата Сообщение от DrOffset Посмотреть сообщение
Просто для справки: В Qt, QString внутри хранит UTF-16.
если юзать фреймворк, то даже не важно, как там внутри. Но я даже не имел в виду QString или wxString и прочее. Я говорил, что фреймворки нормально работают с UTF-8. Там есть хорошие функции для их работы.
Я вот такие функции использовал в своей проге https://royalxxx.itch.io/wxqrcode

Добавлено через 43 секунды
Цитата Сообщение от Verevkin Посмотреть сообщение
Ну чо ты врёшь-то?!
я тебе уже говорил, но ты забыл
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.03.2025, 18:41
Цитата Сообщение от Royal_X Посмотреть сообщение
Не ну серьезный проект, тем более с переводами, я напишу на каком-нибудь фреймворке, например, Qt, а там есть tr()
А для несерьезных проектов эта тема вообще излишняя.
От ТСа в этом случае требуется только хорошо понимать в чем именно дело, почему так обстоят дела. А инструмент брать самый подходящий для его условий. И это может быть хоть перекодировка всего в 866, если ТСа это устроит.

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
если юзать фреймворк, то даже не важно, как там внутри.
То есть, когда я об этом говорю, то тебе важно:
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня не создастся)
А когда в Qt это так же, то уже не важно?
Ну точно, ты просто соскучился и просто хочешь со мной поспорить.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6224 / 2925 / 1046
Регистрация: 01.06.2021
Сообщений: 10,824
16.03.2025, 18:42
Цитата Сообщение от DrOffset Посмотреть сообщение
просто хочешь со мной поспорить
ладно, я пошел)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2025, 18:42
Помогаю со студенческими работами здесь

Вывод русских букв в Visual Studio 2008
#include &lt;iostream&gt; using namespace std; #include &lt;windows.h&gt; char*Rus(const char*); int main() { long pop1 = 4789426, pop2...

Вывод русских символов в консоль
Чтобы выводить русские буквы в консоли, написал функцию rustext() #include&lt;iostream&gt; using namespace std; ...

Вывод русского текста в консоли
Ребят для курсового проекта требуется реализовать ввод русских букв, сколько уже не мучался с этим итог нулевой. Пробовал ...

Выводит ошибку fatal error C1075: end of file found before the left brace '{' at 'c:\users\user\documents\visual studio 2008\projects\recex4\recex4\c
Как испарвить ошибку fatal error C1075: end of file found before the left brace '{' at 'c:\users\user\documents\visual studio...

Visual Studio выводит адрес памяти вместо числа
Здравствуйте всем, сегодня мною были написаны парочку программ с использованием функций rand() и srand() Так вот, в VS при выводе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru