@Nikita857

Как исправить ошибку в коде из-за сравнения с кириллицей/русским алфавитом?

Дали задание, по логике простое, все работает с англ., но на русском выдает ошибку. Везде советуют вписывать строки с изменением кодировок с комментарием "если вам нравится такая кодировка. то можете использовать это и это"(ага, я новичок выбрал кодировку), либо как не зайду на форумы, так половину спам по типу "ну в интернете найди. все есть" - я же эти форумы не в интернете нашел.
Так вот, делаю здесь компилятор, про кодировки ничего не знаю, точнее про работы их вместе с кодом, можете мне просто написать как это исправить, может тип данных не char, либо скобки, кавычки поставить, 100% это у миллионов новичков встречалось, куда там новые инструкции, библиотеки втюхивать, все должно быть проще, разве нет?
main.cpp:19:14: warning: multi-character character constant [-Wmultichar]
   19 |     if (a == 'Д')
      |              ^~~~
  • Вопрос задан
  • 358 просмотров
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks
Сравнивайте не с буквой, а с её кодом.

p.s.
Компьютер не умеет работать с текстом, только с числами. Поэтому ваша буква Д автоматически переводится по таблице соответствия в число. Похоже, что автоматически используется таблица, которая сопоставляет букве Д два байта, а переменная a - один байт.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Итак, нам нужна обработка русского текста, портабельно и поменьше геморроя. Если константа 'Д' многосимвольная — значит, кодировка исполнения UTF-8 и на string забивай, тяжело будет. Работаем в строчке пошире: wstring, u16string или u32string. Главное, разобраться, как правильно выводить всё это в консоль — например, через wcout. То есть:
wchar_t a;
if (a == L'Д') {}


Иногда можно работать и в UTF-8: std::string s; if (s.starts_with("Д")) {} (Си++20!!) Но инструментарий поуже будет, а под Windows с разнобоем кодировок — не советую.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы