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

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

16.03.2025, 12:41. Показов 4485. Ответов 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
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
16.03.2025, 15:32
C++
1
#include <locale.h>
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
16.03.2025, 17:22
https://www.cyberforum.ru/post14609532.html
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
16.03.2025, 17:28
У меня её код нормально вводит и выводит русские символы. Visual Studio.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
16.03.2025, 17:34
CoderHuligan, потому что у тебя система православная.
У меня выводятся вопросительные знаки, причем твой сишный хидер, как и ожидалось, не решает проблему

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

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



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

А максимум он о том, как все это в принципе работает. Когда понимаешь как работает, то находить решения проще.
Это гораздо лучше, чем наобум вставлять во все места setlocale.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
16.03.2025, 18:03
Royal_X, извини, ты наверное хотел написать "сори, я не прочитал, что написано в твоем посте и переврал его смысл"?
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
16.03.2025, 18:21
Цитата Сообщение от DrOffset Посмотреть сообщение
Ясно?
Мне пока ясно, что если пишется код на С++, то кириллицу можно использовать только в комментариях)))
Либо придется попрощаться с чистым С++ и писать либо платформозависимый код, либо использовать кроссплатформенный фреймворк.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
16.03.2025, 18:30
Цитата Сообщение от Royal_X Посмотреть сообщение
я извинюсь, если ты напишешь для ТС чистый платформо-независимый код на С++ для работы с кириллицей.
Любой такой код вынужден будет выделить абстракции, реализация которых будет платформо-зависимой.
Твой подход с галочкой в настройках - тоже платформо-зависимый. Если галочка не установлена, или если версия винды ниже Windows 10, то работать это не будет.

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

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

Добавлено через 3 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
Мне пока ясно, что если пишется код на С++, то кириллицу можно использовать только в комментариях)))
Если пишется полноценный, серьезный проект на C++, то кириллица должна быть в файлах\ресурсах перевода. В исходниках кириллицы быть не должно.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
16.03.2025, 18:31
Цитата Сообщение от DrOffset Посмотреть сообщение
Любой такой код вынужден будет выделить абстракции, реализация которых будет платформо-зависимой.
что подтверждает мое утверждение, что кириллицу использовать на чистом С++ не получится. Я это говорю на форуме уже давно, уже устал повторять, меня даже в русофобии обвиняли, хотя нет даже связи между кириллицей и русофобией...
Цитата Сообщение от DrOffset Посмотреть сообщение
Твой подход с галочкой в настройках - тоже платформо-зависимый.
Согласен, и я обратного никогда и не утверждал. Я всего лишь эту галку предложил как быстрый метод для избавления от мук на винде. И даже намекнул на побочные эффекты.
Цитата Сообщение от DrOffset Посмотреть сообщение
то создастся впечатление, что у нас чистый, платформонезависимый код.
у меня не создастся)
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
16.03.2025, 18:35
Цитата Сообщение от DrOffset Посмотреть сообщение
Если пишется полноценный, серьезный проект на C++, то кириллица должна быть в файлах\ресурсах перевода. В исходниках кириллицы быть не должно.
Не ну серьезный проект, тем более с переводами, я напишу на каком-нибудь фреймворке, например, Qt, а там есть tr()
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
16.03.2025, 18:36
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня не создастся)
Потому что ты очень хочешь со мной поспорить?
0
Злостный нарушитель
 Аватар для Verevkin
10242 / 5670 / 1260
Регистрация: 12.03.2015
Сообщений: 26,278
16.03.2025, 18:36
Цитата Сообщение от Royal_X Посмотреть сообщение
это велосипед для винды (а именно для MSVC, поскольку на mingw не работает)
Ну чо ты врёшь-то?!
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
16.03.2025, 18:39
Цитата Сообщение от DrOffset Посмотреть сообщение
Просто для справки: В Qt, QString внутри хранит UTF-16.
если юзать фреймворк, то даже не важно, как там внутри. Но я даже не имел в виду QString или wxString и прочее. Я говорил, что фреймворки нормально работают с UTF-8. Там есть хорошие функции для их работы.
Я вот такие функции использовал в своей проге https://royalxxx.itch.io/wxqrcode

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

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
если юзать фреймворк, то даже не важно, как там внутри.
То есть, когда я об этом говорю, то тебе важно:
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня не создастся)
А когда в Qt это так же, то уже не важно?
Ну точно, ты просто соскучился и просто хочешь со мной поспорить.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6136 / 2830 / 1039
Регистрация: 01.06.2021
Сообщений: 10,314
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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru