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

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

20.02.2023, 23:18. Показов 651. Ответов 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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
21.02.2023, 00:27
Лучший ответ Сообщение было отмечено Человек Челов как решение

Решение

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

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

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

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

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

В любом случае, универсальным ответом будет: "используйте юникод". Здесь достаточно тем, где все очень подробно объяснялось. Например вот про консоль: https://www.cyberforum.ru/post14609532.html
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
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
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru