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

Русский язык в c++

20.02.2023, 23:18. Показов 603. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что делать если не работает библиотека Windows.h ?
Все время приходится использовать setlocale, но даже при его использовании невозможен ввод на русском.
Может связано с версией вижуал студио.
Кто сталкивался с подобной проблемой?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2023, 23:18
Ответы с готовыми решениями:

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой кодировки?

Русский язык
если ввожу имя игрока на русском, выводит ересь, я вроде написал setlocale(LC_ALL, "Russian");, я так понимаю не в то место , помогите...

русский язык
Использую компилятор Dev C++ , при выводе результата если написать слово про русски то оно выводиться непонятными иероглифами, на латинице...

7
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
21.02.2023, 00:27
Лучший ответ Сообщение было отмечено Человек Челов как решение

Решение

Цитата Сообщение от Человек Челов Посмотреть сообщение
если не работает библиотека Windows.h ?
Никто здесь не знает что такое "не работает". Описывайте нормально проблему.

Цитата Сообщение от Человек Челов Посмотреть сообщение
Все время приходится использовать setlocale
Само по себе это не проблема.

Цитата Сообщение от Человек Челов Посмотреть сообщение
при его использовании невозможен ввод на русском.
Ввод куда? В консоль?

Цитата Сообщение от Человек Челов Посмотреть сообщение
Может связано с версией вижуал студио.
Точно нет.

Цитата Сообщение от Человек Челов Посмотреть сообщение
Кто сталкивался с подобной проблемой?
Для начала проблему надо обозначить.

В любом случае, универсальным ответом будет: "используйте юникод". Здесь достаточно тем, где все очень подробно объяснялось. Например вот про консоль: https://www.cyberforum.ru/post14609532.html
1
Заблокирован
21.02.2023, 01:19
С русскими символами (которые лежат в отрицательном сектора знакового char-f) , именно в VS при работе со встроенными функциями следует приводить к беззнаковому символьному типу .
Например, после установки правильной локали и кодировки консоли :

C++
1
2
3
4
char ch;
cin >> ch; // вводим букву 'я'
if (isalpha(unsigned char(ch)))
   cout << ch << "is a letter";
Вероятно, это связано с тем как в "локали" представлены эти символы.
Но тут я не уверен.
И да, Юникод это круто.
1
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
21.02.2023, 04:18  [ТС]
DrOffset, да,даже при использовании setlocale ввод в консоль возможен только на английском, иной ввод вызывает неполадки

Добавлено через 5 минут
SmallEvil, SmallEvil, да, это частный случай неудобств с локалью. Всё же лучше использовать юникод

Добавлено через 10 минут
Хотя конечно очень будет раздражать буква "w" перед остримами, но что же поделать.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
21.02.2023, 09:27
Цитата Сообщение от Человек Челов Посмотреть сообщение
иной ввод вызывает неполадки
И снова ни слова какие неполадки, никакого примера проблемного кода... удивительно
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
21.02.2023, 12:42  [ТС]
KSergey9, потому что это не имеет значения.
Ну если вам так принципиально:
1.Млжет проигнорироваться ввод и произойдет exit программы.
2.В случае обработки некорректного пользовательского ввода может случится бесконечный цикл.
3.Условия с введенным символом не выполняется
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
21.02.2023, 14:56
Цитата Сообщение от Человек Челов Посмотреть сообщение
Ну если вам так принципиально:
Да мне вообще до лампочки. Вопрос-то у вас.

А теперь позволю себе прокомментировать вашу пункты.

Цитата Сообщение от Человек Челов Посмотреть сообщение
1.Млжет проигнорироваться ввод и произойдет exit программы.
Если программист написал кривой код.

Цитата Сообщение от Человек Челов Посмотреть сообщение
2.В случае обработки некорректного пользовательского ввода может случится бесконечный цикл.
Ошибочка в порядке слов. Должно быть так:
В случае некорректной обработки пользовательского ввода ...
Почувствуйте разницу.

Цитата Сообщение от Человек Челов Посмотреть сообщение
3.Условия с введенным символом не выполняется
В начале фразы пропущено важное. Должно быть так:
Написанное с ошибкой условие...

Я это всё к чему.
Без демонстрации вашего кода, содержащего ошибки, вы так и будете пребывать в иллюзиях, что это проблемы кириллицы, а не вашего кода.

Выбор за вами: получить предметные подсказки по проблемам в код и их решению, или "не имеет значения".
0
15 / 3 / 0
Регистрация: 18.01.2023
Сообщений: 282
21.02.2023, 19:42  [ТС]
пожалуйста
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#include <iostream>
#include <cstdlib>
#include <string>
#include<ctime>
 
enum class Monsters
{
    MONSTER_OGRE,
    MONSTER_GOBLIN,
    MONSTER_SKELETON,
    MONSTER_ORC,
    MONSTER_TROLL,
};
 
enum class Warrior
{
    WARRIOR_ASASSIN,
    WARRIOR_KNIGHT,
    WARRIOR_ARCHER,
    WARRIOR_WIZZARD,
};
 
struct M
{
    std::string monsterName;
    int monsterHealth;
    int monsterDanage;
};
 
struct W
{
    std::string warName;
    int warHP;
    int warDamage;
    int criticalChance;
};
 
int getRandomNumber(int min, int max)
{
    static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
    // Равномерно распределяем рандомное число в нашем диапазоне
    return static_cast<int>(rand() * fraction * (max - min + 1) + min);
}
 
const static M ogre{ "Огр",200,60};
const static M goblin{ "Гоблин",170,40 };
const static M skeleton{ "Скелетон",25,35 };
const static M orc{ "Орк",35,50 };
const static M troll{ "Тролль ",300,150 };
const static W assasin{ "Ассасин",60,70,rand()%15};
const static W knight{ "Рыцарь",100,60,rand()%25};
const static W archer{ "Лучник",55,90,rand()%20};
const static W wizzard{ "Волшебник",51,110,rand() % 10};
 
M monster;
W player;
 
M getRanMonster()
{
    int randMonst = rand() % 5;
    switch (randMonst)
    {
    case 0:
        return ogre;
    case 1:
        return goblin;
    case 2:
        return skeleton;
    case 3:
        return orc;
    case 4:
        return troll;
    }
}
 
void criticalChance()
{
    setlocale(0, "rus");
 
    if (assasin.criticalChance == 5)
    {
        monster.monsterHealth -= 90;
        std::cout << "Критический урон!!Ты нанес 90 урона!" << '\n';
    }
    else if (knight.criticalChance == 5)
    {
        monster.monsterHealth -= 85;
        std::cout << "Критический урон!!Ты нанес 85 урона!" << '\n';
    }
    else if (archer.criticalChance == 5)
    {
        monster.monsterHealth -= 100;
        std::cout << "Критический урон!!Ты нанес 100 урона!" << '\n';
    }
    else if (wizzard.criticalChance == 5)
    {
        monster.monsterHealth -= 115;
        std::cout << "Критический урон!!Ты нанес 115 урона!" << '\n';
    }
}
 
void healthPotion()
{
    setlocale(0, "rus");
    int plusHealthPoints = rand() % 30 + 10;
    player.warHP += plusHealthPoints;
    std::cout << "Ты получил " << plusHealthPoints << " здоровья" << '\n';
}
 
int runAway()
{
    bool savedOrNo = getRandomNumber(0, 2);
    return savedOrNo;
}
 
void game()
{
    setlocale(0, "rus");
    char danet;
    char again;
    std::cout << '\t' <<'\t'<< "Добро пожаловать в игру <<Битва с монстрами>>" << '\n';
    std::cout << "Ввод на английском плес" << '\n';
    std::cout << "Введи имя: ";
    std::string name;
    std::cin >> name;
    std::cout << "Привет, " << name << "!";
    int choice;
    std::cout << "Выбери своего бойца:" << '\n';
    std::cout << "1)" << assasin.warName << '\n';
    std::cout << "2)" << knight.warName << '\n';
    std::cout << "3)" << archer.warName << '\n';
    std::cout << "4)" << wizzard.warName << '\n';
    while (true) {
        std::cout << "Твой выбор(1,2,3,4): ";
        std::cin >> choice;
        if (choice == 1) {
            player = assasin;
            break;
        }
        else if (choice == 2)
        {
            player = knight;
            break;
        }
        else if (choice == 3) {
            player = archer;
            break;
        }
        else if (choice == 4) {
            player = wizzard;
            break;
        }
        else
        {
            std::cin.clear();
                std::cin.ignore(32767, '\n');
            continue;
        }
    }
    while (true) {
        monster = getRanMonster();
        std::cout << "Ты встретил " << monster.monsterName << '\n';
        std::cout << "У него " << monster.monsterHealth << " здоровья" << " и " << monster.monsterDanage << " урона" << '\n';
        char ch;
        do {
            std::cout << "Что будешь делать, бить или убегать?(b/y):";
            std::cin >> ch;
            std::cin.clear();
            std::cin.ignore(32767, '\n');
        } while (ch != 'y' && ch != 'b');
        if (ch == 'y')
        {
            if (runAway() == 1)
            std::cout << "Ты не успел сбежать и монстр убил тебя со спины:(" << '\n';
            else {
                std::cout << "Тебе удалось сбежать" << '\n';
            }
        }
        else  if (ch == 'b') {
            std::cout << "Битва!!" << '\n';
            do {
                std::cout << "Бьет " << monster.monsterName << "!!" << '\n';
                player.warHP -= monster.monsterDanage;
                if (player.warHP <= 0)
                {
                    std::cout << "Тебя убили((" << '\n';
                    std::cout << "Ты проиграл!!" << '\n';
                    break;
                }
                if (player.warHP < 50)
                {
                    do {
                        std::cout << "У тебя есть зелье здоровья, хочешь воспользоваться?(d/n): ";
                        std::cin >> danet;
                        if (danet == 'd')
                        {
                            healthPotion();
                            break;
                        }
                    } while (danet != 'd' && danet != 'n');
                }
                std::cout << "Тебе нанесли " << player.warDamage << " урона" << '\n';
                std::cout << "У тебя осталось " << player.warHP << " здоровья" << '\n';
                std::cout << "Ты бьёшь!" << '\n';
                monster.monsterHealth -= player.warDamage;
                criticalChance();
                if (monster.monsterHealth <= 0)
                {
                    std::cout << "Ты убил монстра!!" << '\n';
                    std::cout << "Ты выиграл!!" << '\n';
                    break;
                }
                std::cout << monster.monsterName << " получил " << player.warDamage << " урона" << '\n';
                std::cout << "У " << monster.monsterName << " осталось " << monster.monsterHealth << '\n';
            } while (player.warHP >= 0 && monster.monsterHealth >= 0);
        }
            std::cout << "Хочешь продолжить?(d/n): ";
            std::cin >> again;
            if (again == 'd')
                continue;
            else if (again == 'n')
            {
                std::cout << "Ну что ж, спасибо за игру!" << '\n';
                exit(0);
            }
            else 
            {
                std::cin.clear();
                std::cin.ignore(32767, '\n');
                std::cerr << "Ошибка ввода..." << '\n';
                exit(-1);
            }
    }
}
 
int main()
{
    srand(time(0));
    game();
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2023, 19:42
Помогаю со студенческими работами здесь

Русский язык в C++
Как в C++ консоли подключить русский язык желательной setLoceta(Rus) такой функцией, у меня не получилось её использваоть

Русский язык
Помогите пишу задачу,как сделать чтоб всё выводило на русском языке? какая функция? или фрагмент кода? cout&lt;&lt;&quot;Dobavlenie...

Русский язык
Уже задолбался с попыткой заставить выводить считанные русские строки. Имеем. По идее там должна быть функция CharToOem но она коверкает....

Русский язык
char szNonColorEmbeddedMsg; int iNonColorEmbeddedMsgLen = 0; for (size_t pos = 0; pos &lt; strlen(szMsg) &amp;&amp; szMsg != '\0'; pos++) ...

Русский Язык!!!
Как в переменную char A; занести Ф только чтоб после отоброжалось не каракули а Ф! и библиотеку!


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru