Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.11.2020
Сообщений: 4

GCC не хочет работать с кириллицей

22.11.2020, 10:16. Показов 3614. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Решил изучить Си. Работаю в Arch linux. Уже знаю питона, и ещё паскаля) И так. Моя проблема в том, что gcc при компилировании все символьные константы с русскими буквами, выдаёт предупреждение: многознаковая символьная константа [-Wmultichar]. Я уже перебрал все возможные способы. Использовал wchar.h и wctype.h. Использовал putwchar и getwchar Но компилятор всё равно выдаёт это предупреждение. Я использую кодировку UTF-8. GCC у меня по-умолчанию распознаёт ASCII. Но я вставил -finput-charset=UTF-8 -fexec-charset=UTF-8. И всё равно выдаёт это предупреждение. Короче говоря, когда я ввожу кириллицу, и у меня в программе есть условие, где это введённый символ сравнивается с символьной константой на кириллице. Я хочу, чтоб компиляторы работал именно с UTF-8 а не с ASCKII. Он даже не выводит введённый символ на кириллице. С латинскими буквами всё ОК просто.

Вот программа, на которой я всё это проверял:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
    wchar_t ch;
 
    ch = getwchar();
 
    putwchar(ch);
 
    return 0;
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
    wchar_t ch;
 
    ch = getwchar();
 
    if(ch == 'э')
               printf("qwer")
 
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2020, 10:16
Ответы с готовыми решениями:

Dictionary не хочет искать значение, которое написано кириллицей
Вот такая ситуация. Не пойму, что не так Если значение латиница, то все ищет и работает на ура. А вот если кириллицей, то не хочет...

Интернет не хочет работать,все хорошо подключается а браузер открывать не хочет первую страницу отображает
ребят такой вопрос,установил винду 8,все норм только интернет не хочет работать,все хорошо подключается а браузер открывать не хочет первую...

Gcc не хочет понимать класс
Здраствуйте! У меня возникла следующая проблема: Я перешёл на линукс и нормально работал, пока не понадобилось использовать класс для...

4
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
22.11.2020, 11:52
Цитата Сообщение от lucky_sergius Посмотреть сообщение
C
1
if(ch == 'э')
тут мы сравниваем wchar_t с char - потому и предупреждение.
надо указывать, что символ болжен быть именно в wchat_t:
C
1
if(ch == L'э')
К тому же программа по умолчанию запускается с локалью C, установите русскую локаль setlocale(LC_ALL, "Russian");
0
0 / 0 / 0
Регистрация: 22.11.2020
Сообщений: 4
22.11.2020, 14:52  [ТС]
Хмм. Я уже ставил префикс L. Компилятор в таких случаях на самом деле не выдавал предупреждений или ошибки. Но. Когда я в if сравниваю введённый символ с константой, то он не выполняет всё равно, что надо. Он просто читает символ, но не сравнивает. В терминах я в не ладах, поэтому может быть я не могу ясно объяснить причину) Это ошибка, как я увидел в интернете, очень распространённая. Но я всё выполнял что там говорилось, и программа не делает то, что от неё требую. Элементарно оператор switch(). В кейсах у меня стоят также символьные константы на кириллице, но либо введённый мной символ в не той кодировке, либо всё таки что-то не так я делаю, оператор не пытается сравнить символ с символами в кейсах, а просто выдаёт то, что написано в default. Я работаю в vim. И кодировка у него по-умолчанию стоит UTF8. У меня вся система на utf8. Но как я читал в книгах, то Си распознаёт только ASCII. Но, я узнал про сторонние библиотеки, которые позволяют работать с utf8. Но испробовав их, я не получил желаемого, т.к. программа после введения мной символа ничего не делала. В какой-то степени мне это сейчас не принципиально, но мой интерес берёт надо мной вверх и я хочу узнать что не так.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
22.11.2020, 15:29
попробуйте компилировать с таким префиксом -finput-charset=CP1251 -fexec-charset=CP866
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main(void)
{
    char ch;
    ch = getchar();
    if(ch == 'э')
        printf("qwer");
    return 0;
}
У меня правда Windows, не linux, но без указанного префикса тоже не работало.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
22.11.2020, 19:24
Лучший ответ Сообщение было отмечено lucky_sergius как решение

Решение

Цитата Сообщение от мама Стифлера Посмотреть сообщение
попробуйте компилировать с таким префиксом -finput-charset=CP1251 -fexec-charset=CP866
Ни в коем случае! Это доисторический раритет, от которого даже в windows отказываются.
Цитата Сообщение от lucky_sergius Посмотреть сообщение
Вот программа, на которой я всё это проверял:
Локаль забыли:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
int main(void){
  setlocale(LC_ALL, "");
  wchar_t ch;
  
  ch = getwchar();
  
  if(ch == L'э')printf("qwer\n");
  
  return 0;
}
Code
1
2
3
4
$ gcc main.c
$ ./a.out 
э
qwer
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2020, 19:24
Помогаю со студенческими работами здесь

Как правильно работать с кириллицей
Если вы пишете программу на QBASIC под Windows XP и вам нужно оперировать с файлами, содержащими русские буквы, соблюдайте ...

Как заставить pythonanywhere.com работать с кириллицей
Телеграмм бот получает txt файл с кириллицей и сохраняет его. На локальном компьютере все сохраняется нормально, но на pythonanywhere вся...

Как правильно настроить сервер и создать БД, чтобы работать с кириллицей
Доброго времени суток. Уважаемые Гуру, подскажите новичку в работе с базами и mysql в частности. Проблема у меня с кодировкой, я...

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но на моей основной машине установлена 64...

Не хочет работать QT
Недавно начал изучать С++ и поставил QT creator 4.3.1(Community). Сначало было все норм, писал програмку, запускал и все работало, теперь...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru