На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Каркас таблицы (псевдографика) выводится вопросами в консоли , чистый СИ, visual studio 2010
    прописал, в итоге компиллер ругаться стал на этот вызов SetConsoleTitleA:
    Цитата
    IntelliSense: argument of type "const TCHAR *" is incompatible with parameter of type "LPCSTR"


    какие типы страшные: TCHAR, LPCSTR)

    Добавлено
    все, понял, не заметил, что ты исправил на char*
    но это не помогло все равно...
    в заголовке печатается совсем мало знаков и какие-то кракозябры

    Добавлено
    кодировка у проекта стоит 866, если что
      Цитата FasterHarder @
      кодировка у проекта стоит 866, если что
      Я не знаю, что такое "кодировка проекта", я знаю, что такое "кодировка файла исходного текста".
      Тогда лучше у виндузятников спросить. Я лично проверил: для ANSI-приложения — кодировка файла 866, всё пучком, кодировка 1251 — титл нечитаемый; для UNICODE-приложения — кодировка файла 866, титл нечитаемый, но по-другому, кодировка 1251 — всё пучком.
        Цитата FasterHarder @
        но это не помогло все равно...
        в заголовке печатается совсем мало знаков и какие-то кракозябры

        Попробуй так:
        ExpandedWrap disabled
          static const WCHAR* title = L"Это заголовок консольного окна вывода русскими буквами";
              SetConsoleTitleW(title);

        ---
        И вообще ты всё это зря затеял.
        Надо было оставить проект обычным - со стандартной кодировкой исходника.
        Таблицу рисовать может и не очень наглядно в исходнике, но это же константы:
        ExpandedWrap disabled
          // ╔ - \xc9
          // ═ - \xcd
          // ╦ - \xcb
          // ╗ - \xbb
           
           printf("\xc9\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcb\xcd\xcd\xbb\n");

        ---
        Но самое удобное, очевидно, это взять твою строку из 1-го сообщения
        в формате UTF-16:
        ExpandedWrap disabled
           printf("  ╔═════╦════════════════════╦════════════════════╗\n");

        и использовать её так:
        ExpandedWrap disabled
          static const WCHAR* pStr = L"╔═════╦════════════════════╦════════════════════╗";
          // преобразуем WCHAR -> OEM
           const char* p = Wchar2Oem(pStr);
           printf("%s\n",p);

        И тогда всё получится удобно.
        Надо только сделать конвертер.
        Сообщение отредактировано: ЫукпШ -
          Цитата ЫукпШ @
          Попробуй так:

          :no: , опять кракозябры, но уже ДРУГИЕ кракозябры, не те, которые были до этого)

          тут с этой кодировкой еще такие траблы возникают иногда, что открываешь проект, а кодировка исходника текста в кракозябрах, где были русс.буквы (комментарии) и псевдографика

          также при считывании файлов с диска *.txt с русским содержимым, тоже не все чисто
          а еще иногда при работе с *.csv-файлами, тоже проблемы с кодировкой

          надо будет как-нибудь сесть и основательно разобраться с этой кодировкой и сделать шпаргалку себе, какую куда преобразовывать, что задает кодировку, операционнка или Visual studio и пр. пр. моменты
            Цитата FasterHarder @
            Цитата ЫукпШ @
            Попробуй так:

            :no: , опять кракозябры, но уже ДРУГИЕ кракозябры, не те, которые были до этого)

            Это означает, что кодировка твоего исходника - не CP1251.
            Что плохо, поскольку этот вариант порождает массу проблем.
            При этом актуальность наличия разнообразных перекодировщиков
            текстовых строк только возрастает.
            ---
            Что означает строка:
            ExpandedWrap disabled
              static const WCHAR* title = L"Это заголовок консольного окна вывода русскими буквами";

            ??
            буквально следующее:
            "Дорогой друг компилятор ! У меня есть строчка "Это заголовок консольного окна вывода русскими буквами"
            в кодировке CP1251. Я поставил вначале L. Вот так:
            L"Это заголовок консольного окна вывода русскими буквами".
            Это значит, что я хочу, чтобы эта строчка в сегменте констант исполнимой программы
            была в кодировке UTF-16.
            Я передам её функции SetConsoleTitleW и увижу правильные буквы в заголовке. "

            А если кодировка исходной строки другая, (а компилятор об этом ведь не знает)
            то все его преобразования бессмысленны.
            Заставить программу работать можно. Но для этого должно быть
            дополнительное преобразование текста.
            Если исходник в формате OEM, тогда:
            ExpandedWrap disabled
              static const char* title = "Это заголовок консольного окна вывода русскими буквами";
              const char* p = Oem2Wcar(title);
              SetConsoleTitleW(p);

            Но это просто не удобно. И к тому же лишает возможности
            использовать это:
            ExpandedWrap disabled
              L"Это заголовок консольного окна вывода русскими буквами";

            Возможны и более сложные варианты.
            Например, исходник - в кодировке ОЕМ, а в настройках проекта стоит "USE UNICODE..."
            Тогда компилятор начнёт по-умолчанию конверсию CP1251 -> UTF16 всех текстовых строк.
            А они - в кодировке ОЕМ.. получатся сплошные неприятности.
            ---
            Предложение менять кодировку исходника для изменения поведения программы - крайне не удачная идея.
            Сообщение отредактировано: ЫукпШ -
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0284 ]   [ 16 queries used ]   [ Generated: 19.03.24, 07:25 GMT ]