Важная информация
Показано с 1 по 3 из 3

Тема: Командная строка

  1. #1 Командная строка 
    Новичок
    Регистрация
    17.01.2018
    Сообщений
    3
    Сказал(а) спасибо
    4
    Поблагодарили 0 раз(а) в 0 сообщениях
    Пользуюсь visual studio2017 community,изучаю язык С. Пишу первую программу по учебнику Прата:
    C++ Code:
    1. #include <stdio.h>
    2. int main(void)
    3. {
    4.   int num;
    5.   num = 1;
    6.   printf("Я простой ") ;  
    7.   printf("компьютер.\n");
    8.   printf ("Моей любимой цифрой является %d, так как она первая. \n", num);
    9.   return О;
    10. }

    Выдаётся командная строка, после запуска, и там вместо русских букв "иероглифы", пробовал на английском- всё хорошо получается, с русскими беда, как исправить?
    Уже нашёл решение
    Последний раз редактировалось rrrFer; 17.02.2018 в 13:27. Причина: форматирование кода
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Цитата Сообщение от 108Cool Посмотреть сообщение
    Уже нашёл решение
    Но все же опишу суть проблемы и решение, т.к. даже если вы нашли решение, вероятно вы не поняли как именно это работает.

    Иероглифы выводятся потому, что char - это число в диапазоне [-128, 127], а unsigned char - [0, 255]. В соответствие каждому такому числу ставится некоторый символ - какой именно символ зависит от кодовой таблицы.

    Однако, сам по себе С++ - это язык программирования и кодовыми таблицами он "не занимается" - все эти проблемы должна решать операционная система (ну хотя бы потому, что кроме кодировки там есть всякие "религиозные" штуки типа "использовать точку или запятую для разделения целой и дробной части числа"). Зависят все эти параметры от географического положения, которыми владеет операционная система.

    Дак вот, операционная система создает ту самую консоль, в которой у вас выводится абракадабра и это она занимается интерпретацией выводимых символов. При этом, надо понимать, что в некоторой кодировке у вас сохранен файл с исходным кодом и в соответствии с ней компилятор назначает коды символам. Если вы сохранили файл в одной кодировке, а в консоли указана другая - то вы и получите абракадабру, т.к. у вас в программе коду X соответствует буква Y, а в windows настроено что этому же коду соответствует Z.

    Самое простое решение - указать кодировку в консоли такую же как в файле с исходником. Надо поковыряться в настройках окна в вашей ОС.

    Другое решение не требует у пользователя вашей программы лезть в настройки консоли в своей ОС. Вы можете указать прямо в программе операционной системе в какой кодировке выводить текст, для этого вы обращаетесь к функциям операционной системы:
    C++ Code:
    1. SetConsoleCP(1251);
    2. SetConsoleOutputCP(1251);

    Однако, функции эти определены в windows.h и работать решение будет только в Windows. Кстати, в данном примере мы устанавливаем кодировку консоли .win1251, поэтому чтобы все работало правильно надо чтобы исходники были в этой же кодировке. Ну а еще... не будет это работать на линуксе, например . Есть конечно аналогичные функции для Linux, но все это выглядит как костыли.

    Самый правильный вариант - использовать Unicode. С его помощью можно выводить любые символы, но тогда вместо char используется wchar, вместо cout - wcout. "строки" в коде надо записывать с фрефиксом L - т.е. вместо "hello world" писать L"hello world". И исходники хранить в UTF-8. Ну и шрифт в консоли надо тоже поменять на юникод.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (17.02.2018), 108Cool (16.08.2018), Free Admin (19.02.2018)

  4. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,911
    Сказал(а) спасибо
    1,841
    Поблагодарили 975 раз(а) в 833 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от rrrFer Посмотреть сообщение
    но все это выглядит как костыли
    Потому что стандартизация долгое время тащила за собой хвосты из прошлого и даже сейчас это вызывает
    у некоторых проблемы.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. 2 пользователя(ей) сказали cпасибо:

    108Cool (16.08.2018), Free Admin (19.02.2018)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Бегущая строка
    от Polina.r11 в разделе Общие вопросы программирования
    Ответов: 0
    Последнее сообщение: 29.06.2017, 17:50
  2. Ответов: 0
    Последнее сообщение: 28.06.2017, 19:04
  3. Командная строка
    от chuxlo в разделе Delphi
    Ответов: 4
    Последнее сообщение: 03.04.2016, 20:59
  4. строка перебор букв
    от 123456789igor в разделе Общие вопросы программирования
    Ответов: 0
    Последнее сообщение: 28.02.2013, 00:11
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •