Но он печатает случайные символы. Как я могу выводить греческие буквы? И точно так же, как я могу вводить данные на греческом?
a573263 15 Дек 2021 в 19:39
Посмотрите на эту ссылку: docs.microsoft.com/en-us/cpp/c-runtime-library/reference/…
Semih Artan
15 Дек 2021 в 20:04
Ваш пример printf(«Καλησπέρα»); будет работать , если ваш компилятор C и ваша среда отображения согласны с тем, какую кодировку — UTF-8, UTF-16 и т. Д. — использовать для символов Unicode. Вам также может потребоваться добавить в вашу программу строки #include и setlocale(LC_CTYPE, «»); . См. Также utf8everywhere.org.
Steve Summit
15 Дек 2021 в 20:14
Саммит спасибо. Я попробую, когда смогу
15 Дек 2021 в 20:35
15 Дек 2021 в 20:35
В Windows, когда вы используете C Runtime для печати текста в Unicode, вы должны переключить режим вывода на Unicode, вызвав _setmode с первым параметром, установленным на файловый дескриптор sdtout, а вторым параметром — на _O_U16TEXT.
Semih Artan
15 Дек 2021 в 21:01
1 ответ
Лучший ответ
Язык Си: установка MinGW и «Hello World» (компилятор gcc)
Добро пожаловать в Stack Overflow, и спасибо, что задали такой интересный вопрос! Я хочу, чтобы то, что вы пытаетесь сделать, было простым. Но ваш язык программирования (C) и среда выполнения (консоль Windows) были разработаны давно, без учета греческого языка. В результате их непросто использовать для вашего простого школьного проекта.
Когда ваша программа на C выводит байты в стандартный вывод через printf, консоль Windows интерпретирует эти байты как символы. Он имеет интерпретацию по умолчанию или кодировку , которая не включает греческий язык. Чтобы отображались греческие буквы, вам необходимо указать консоли Windows использовать правильную кодировку. Это можно сделать с помощью вызова _setmode с параметром _O_U16TEXT . Это описано в _setmode документация для Windows, как указал Семих Артан в комментариях.
Режим _O_U16TEXT означает, что ваша программа должна печатать текст в формате UTF-16. Каждый символ имеет длину 16 бит. Это означает, что вы должны представлять свой текст как широкие символы, используя синтаксис C, например L»x039a» . L перед двойными кавычками отмечает строку как имеющую «широкие символы», где каждый символ имеет 16 бит вместо 8 бит. x в строке указывает, что следующие четыре символа являются шестнадцатеричными цифрами, представляющими 16 битов широкого символа.
Ваша программа на C сама по себе является текстовым файлом. Компилятор C должен интерпретировать байты этого текстового файла с точки зрения символов. При простом использовании компилятор будет ожидать в файле только ASCII-совместимые байтовые значения. Сюда входят латинские буквы и цифры, а также простые знаки препинания. Он не включает греческие буквы.
Таким образом, вы должны написать свой греческий текст, представив его байты с заменами ASCII.
Я полагаю, что греческие символы Καλησπέρα представлены в синтаксисе расширенных символов C как L»x039ax03b1x03bbx03b7x03c3x03c0x03adx03c1x03b1″ .
Как компилировать C/C++ в Visual Studio Code на Windows?
Наконец, консоль Windows должна иметь доступ к греческому шрифту, чтобы отображать греческие символы. Я полагаю, это не проблема для вас, потому что вы, вероятно, уже используете свой компьютер на греческом языке. В любом случае Windows по всему миру включает шрифты с греческим покрытием.
Это можно получить, вставив этот греческий текст в пример программы в документации Microsoft _setmode . (Примечание: я сам не тестировал эту программу.)
#include #include #include int main(void)
Другое дело — ввод. Я не буду здесь вдаваться в подробности. Вероятно, вам придется установить режим stdin на _O_U16TEXT . Тогда символы будут отображаться как UTF-16. Возможно, вам придется преобразовать их, прежде чем они станут полезными для вашей программы.
В целом, чтобы написать простое приложение для школьного проекта, которое читает и пишет по-гречески, я предлагаю вам рассмотреть возможность использования такого инструмента, как Visual Studio, для написания программы с графическим интерфейсом. Эти инструменты имеют более современный дизайн и упрощают доступ к тексту с греческими буквами.
Jim DeLaHunt 27 Дек 2021 в 11:44
Спасибо за ответ! Я думаю, что я буду в порядке, используя _setmode, НО 2 вопроса: 1. НУЖНО ли мне реализовать текст как символы ASCII? Это будет несколько сложно и займет некоторое время и 2. Мне бы очень понравилось использовать VS, но я знаю только некоторые базовые C, а VS (к сожалению) не поддерживает C . или поддерживает? заранее спасибо
26 Дек 2021 в 20:55
В: «НУЖНО ли мне реализовывать текст как символы ASCII?» Ответ: Да. Как я сказал в ответе, «… компилятор будет ожидать в файле только ASCII-совместимые байтовые значения… Таким образом, вы должны написать свой греческий текст, представив его байты с заменами ASCII».
Jim DeLaHunt
27 Дек 2021 в 11:40
Q: «VS (к сожалению) не поддерживает C . или нет?» О: это другой вопрос. Похоже, вы новичок в Stack Overflow. Следует знать, что эти комментарии не предназначены для обсуждения и уточняющих вопросов. Задайте свой вопрос о Visual Studio как отдельный вопрос, и пусть он получит отдельные ответы. Таким образом, знания яснее и легче. Кроме того, вы получаете больше очков репутации.
Я не буду пытаться отвечать на последующий вопрос в этой дискуссии.
Jim DeLaHunt
27 Дек 2021 в 11:44
Еще один совет для успеха в Stack Overflow: если это правильный ответ на ваш вопрос, нажмите «галочку» (✔️) слева от ответа, чтобы принять его. Если этот ответ полезен, щелкните треугольник, направленный вверх, чтобы проголосовать за него. Голосование за и принятие полезных ответов делает их более заметными для других читателей. (Это также дает мне, как автору ответов, больше очков.)
Jim DeLaHunt
27 Дек 2021 в 11:47
Ага . Я новичок . Я знаю, что «это отвлекает» (это означает, что это очевидно), как мы говорим здесь, в Греции! В любом случае спасибо за ответы!
Источник: question-it.com
Как запустить код в Visual Studio Code
Работа в VS Code
Автор admin На чтение 4 мин Просмотров 6.1к. Опубликовано 18.10.2021
Один из самых популярных редакторов исходного кода Visual Studio Code очень удобен для начинающих. Удобный интерфейс и расширенные возможности привлекают как начинающих, так и опытных программистов.
Если вы новичок в VS Code и ищете упрощенное руководство по запуску кода, вы попали по адресу. Мы расскажем вам о настройке необходимого программного обеспечения и выполнении кода с использованием знакомых языков, таких как C/C++ и Python.
Запуск C++ кода
- Откройте VS Code.
- Выберите значок просмотра расширений на панели активности или используйте комбинацию клавиш (Ctrl+Shift+X).
- Введите в строку поиска ‘C++’.
- Установите плагин.
После установки расширения, при открытии или создании *.cpp файла у вас будет подсветка синтаксиса, интеллектуальные завершения (IntelliSense), а также проверка ошибок.
Установка компилятора
C++ — компилируемый язык, то есть исходный код программы должен быть переведен (скомпилирован), прежде чем он будет запущен на компьютере. VS Code — это, прежде всего, редактор, и для выполнения большей части рабочего процесса разработки он полагается на инструменты командной строки. Расширение C/C++ не включает компилятор C++ или отладчик. Нужно будет установить эти инструменты или использовать уже установленные на вашем компьютере.
Возможно, компилятор и отладчик C++ уже есть в вашей учебной или рабочей среде разработки. Узнайте у своих преподавателей или коллег, как установить рекомендуемый набор инструментов C++ (компилятор, отладчик, проектную систему, линтер).
На некоторых платформах, таких как Linux или macOS, компилятор C++ уже установлен. В большинстве дистрибутивов Linux установлен GNU Compiler Collection (GCC), а пользователи macOS могут получить инструменты Clang вместе с Xcode.
- Установите MinGW
- Выберите нужный компилятор, потом перейдите в вкладку installation и нажмите apply change для сохранения настроек. Компилятор начнет скачиваться.
- Нужно, чтобы Windows распознал установленный компилятор. Для этого зайдите в папку где он установлен, обычно C:MinGWbin .
Вам необходимо найти вкладку «переменные среды». Для этого зайдите в мой компьютер, щелкните вкладку «свойства системы» => «дополнительные параметры системы» => «переменные среды». - Перейдите в раздел Системные переменные и нажмите создать. Добавьте новую переменную среды C:MinGWbin . Сохраните.
- Но и это еще не все =). Теперь вы можете написать свою программу в редакторе кода. Но запустить еще не сможете, осталось сделать файл сборки. Для этого нажмите компбинацию CTRL+SHIFT+B => Создать файл tasks.json из шаблона => others.
- В json файл вставьте данный код
Где main.cpp — имя вашего файлы.
При сохранении файла, копилятор скомпилирует программу и можно будет запустить ее в терминале.
Видеоинструкция для подробного ознакомления
Запуск Python кода
- используйте сочетание клавиш Ctrl + Alt + N;
- или нажмите F1, а затем выберите Run Code (Запуск кода);
- или щелкните правой кнопкой мыши в текстовом редакторе и выберите Run Code в контекстном меню редактора;
- или нажмите кнопку Run Code в меню заголовка редактора.
Чтобы остановить запущенный код:
- используйте сочетание клавиш Ctrl + Alt + M
- или нажмите F1, а затем выберите Stop Code Run
- или щелкните правой кнопкой мыши на выходном канале и выберите Stop Code Run в контекстном меню.
Если вы хотите добавить путь к Python, вы можете перейти в меню Файл → Предпочтения → Настройки и добавить путь к Python, как показано ниже:
«code-runner.executorMap»:
«python»: «»C:\Program Files\\Python35\python.exe» -u»
>
Если вы уже установили расширение Python и вручную настроили интерпретатор, вы можете настроить ваш файл settings.json следующим образом:
«python.pythonPath»: «C:\\python36\\python36.exe»,
«code-runner.executorMap»:
«python»: «$pythonPath -u $fullFileName».
>
>
Как запустить HTML, JS
Html файл вы можете открыть с помощью браузера, VS code может только редактировать содержимое документа.
Запуск JS кода приведен в видео руководстве.
Источник: visualstudiocode1.ru
Русский язык в консоли
«Повторяющееся слово: » — отображается нормально благодаря setlocale. То что после — крякозяблы, хотя повторяющееся слова находит. setlocale пробовал разные (0, «»), «», «Rus» и пр. В Code::Blocks всё работает и без крякозяблов. Даже без setlocale.
Отслеживать
20.1k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак
задан 17 окт 2015 в 14:52
701 1 1 золотой знак 6 6 серебряных знаков 3 3 бронзовых знака
увы, но setlocale Вас не спасёт, единственный вариант нормальный это сменить кодировку в консоли
17 окт 2015 в 15:00
Найдите дубликат, кто-нибудь!
17 окт 2015 в 16:46
18 окт 2015 в 2:05
– user177221
18 окт 2015 в 11:40
18 окт 2015 в 19:38
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
Для данной задачи существует множество решений. Если вам нужно быстрое и не обязательно универсальное решение, чтобы сильно не разбираться, прокручивайте к разделу «Менее правильные, но пригодные решения».
Правильное, но сложное решение
Для начала, проблема у консоли Windows состоит в том, что её шрифты, которые стоят «по умолчанию», показывают не все символы. Вам следует сменить шрифт консоли на юникодный, это позволит работать даже на английской Windows. Если вы хотите поменять шрифт только для вашей программы, в её консоли нажмите на иконку в левом верхнем углу → Свойства → Шрифт. Если хотите поменять для всех будущих программ, то же самое, только заходите в Умолчания, а не Свойства.
Lucida Console и Consolas справляются со всем, кроме иероглифов. Если ваши консольные шрифты позволят, вы сможете вывести и 猫 , если нет, то лишь те символы, которые поддерживаются.
Дальнейшее рассмотрение касается лишь Microsoft Visual Studio. Если у вас другой компилятор, пользуйтесь предложенными на свой страх и риск, никакой гарантии нету.
Теперь, кодировка входных файлов компилятора. Компилятор Microsoft Visual Studio (по крайней мере, версии 2012 и 2013) компилирует исходники в однобайтных кодировках так, как будто бы они на самом деле в ANSI-кодировке, то есть для случая русской системы — CP1251. Это означает, что кодировка исходников в CP866 — неправильна. (Это важно, если вы используете L». » -строки.) С другой стороны, если вы храните исходники в CP1251, то эти же исходники не будут нормально собираться на нерусской Windows. Поэтому стоит хранить исходники в Unicode (например, UTF-8).
Настроив среду, перейдём к решению собственно задачи.
Правильным решением является уйти от однобайтных кодировок, и использовать Unicode в программе. При этом вы получите правильный вывод не только кириллицы, но и поддержку всех языков (изображение отсутствующих в шрифтах символов будет отсутствовать, но вы сможете с ними работать). Для Windows это означает переход с узких строк ( char* , std::string ) на широкие ( wchar_t* , std::wstring ), и использование кодировки UTF-16 для строк.
(Ещё одна проблема, которую решает использование широких строк: узкие строки при компиляции кодируются в однобайтную кодировку используя текущую системную кодовую страницу, то есть, ANSI-кодировку. Если вы компилируете вашу программу на английской Windows, это приведёт к очевидным проблемам.)
Вам нужно _setmode(_fileno(. ), _O_U16TEXT); для переключения режима консоли:
#include #include #include int wmain(int argc, wchar_t* argv[]) < _setmode(_fileno(stdout), _O_U16TEXT); _setmode(_fileno(stdin), _O_U16TEXT); _setmode(_fileno(stderr), _O_U16TEXT); std::wcout
Такой способ должен работать правильно с вводом и выводом, с именами файлов и перенаправлением потоков.
Важное замечание: потоки ввода-вывода находятся либо в «широком», либо в «узком» состоянии — то есть, в них выводится либо только char* , либо только wchar_t* . После первого вывода переключение не всегда возможно. Поэтому такой код:
cout
вполне может не сработать. Используйте только wprintf / wcout .
Если очень не хочется переходить на Unicode, и использовать однобайтную кодировку, будут возникать проблемы. Для начала, символы, не входящие в выбранную кодировку (например, для случая CP1251 — базовый английский и кириллица), работать не будут, вместо них будет вводиться и выводиться абракадабра. Кроме того, узкие строковые константы имеют ANSI-кодировку, а это значит, что кириллические строковые литералы на нерусской системе не сработают (в них будет зависимая от системной локали абракадабра). Держа в голове эти проблемы, переходим к изложению следующей серии решений.
Менее правильные, но пригодные решения
В любом случае, поставьте юникодный шрифт в консоли. (Это первый абзац «сложного» решения.)
Убедитесь, что ваши исходники в кодировке CP 1251 (это не само собой разумеется, особенно если у вас не русская локаль Windows). Если при добавлении русских букв и сохранении Visual Studio ругается на то, что не может сохранить символы в нужной кодировке, выбирайте CP 1251.
(1) Если компьютер ваш, вы можете поменять кодовую страницу консольных программ на вашей системе. Для этого сделайте вот что:
- Запустите Regedit.
- На всякий пожарный экспортируйте куда-нибудь реестр (этот шаг все почему-то пропускают, так что когда всё сломается, мы вас предупреждали).
- В разделе HKEY_CURRENT_USERConsole найдите ключ CodePage (если нету, создайте ключ с таким названием и типом DWORD ).
- Установите значение по ключу (левая клавиша/изменить/Система счисления = десятичная) на 1251.
- Не забудьте перегрузиться после изменений в реестре.
Преимущества способа: примеры из книг начнут работать «из коробки». Недостатки: смена реестра может повлечь за собой проблемы, кодировка консоли меняется глобально и перманентно — это может повлиять сломать другие программы. Плюс эффект будет только на вашем компьютере (и на других, у которых та же кодировка консоли). Плюс общие проблемы неюникодных способов.
Примечание. Установка глобальной кодовой страницы консоли через параметр реестра HKEY_CURRENT_USERConsoleCodePage не работает в Windows 10, вместо него будет использована кодовая страница OEM — предположительно баг в conhost. При этом установка кодовой страницы консоли на уровне конкретного приложения ( HKEY_CURRENT_USERConsole(путь к приложению)CodePage ) работает.
(2) Вы можете поменять кодировку только вашей программы. Для этого нужно сменить кодировку консоли программным путём. Из вежливости к другим программам не забудьте потом вернуть кодировку на место!
Это делается либо при помощи вызова функций
SetConsoleCP(1251); SetConsoleOutputCP(1251);
в начале программы, либо про помощи вызова внешней утилиты
system(«chcp 1251»);
(То есть, у вас должно получиться что-то вроде
#include int main(int argc, char* argv[]) < std::system(«chcp 1251»); .
#include int main(int argc, char* argv[]) < SetConsoleCP(1251); SetConsoleOutputCP(1251); .
и дальше обыкновенный код программы.)
Можно обернуть эти вызовы в класс, чтобы воспользоваться плюшками автоматического управления временем жизни объектов C++.
#include #include int chcp(unsigned codepage) < // составить команду из кусочков std::string command(«chcp «); command += codepage; // выполняем команду и возвращаем результат return !std::system(command.c_str()); >// этот код будет запущен перед main static int codepage_is_set = chcp(1251);
(если выполняете задание из Страуструпа можно вставить в конец заголовочного файла std_lib_facilities.h )
#include class ConsoleCP < int oldin; int oldout; public: ConsoleCP(int cp) < oldin = GetConsoleCP(); oldout = GetConsoleOutputCP(); SetConsoleCP(cp); SetConsoleOutputCP(cp); >// поскольку мы изменили свойства внешнего объекта — консоли, нам нужно // вернуть всё как было (если программа вылетит, пользователю не повезло) ~ConsoleCP() < SetConsoleCP(oldin); SetConsoleOutputCP(oldout); >>; // и в программе: int main(int argc, char* argv[])
Если вам нужен не русский, а какой нибудь другой язык, просто замените 1251 на идентификатор нужной кодировки (список указан ниже в файле), но, разумеется, работоспособность не гарантируется.
Остались методы, которые тоже часто встречаются, приведём их для полноты.
Методы, которые работают плохо (но могут помочь вам)
Метод, который часто рекомендуют — использование конструкции setlocale(LC_ALL, «Russian»); У этого варианта (по крайней мере в Visual Studio 2012) гора проблем. Во-первых, проблема с вводом русского текста: введённый текст передаётся в программу неправильно! Нерусский текст (например, греческий) при этом вовсе не вводится с консоли. Ну и общие для всех неюникодных решений проблемы.
Ещё один метод, не использующий Unicode — использование функций CharToOem и OemToChar . Этот метод требует перекодировки каждой из строк при выводе, и (кажется) слабо поддаётся автоматизации. Он также страдает от общих для неюникодных решений недостатков. Кроме того, этот метод не будет работать (не только с константами, но и с runtime-строками!) на нерусской Windows, т. к. там OEM-кодировка не будет совпадать с CP866. В дополнение можно так же сказать что эти функции поставляются не со всеми версиями Visual Studio — например в некоторых версиях VS Express их просто нет.
Источник: ru.stackoverflow.com