Вернуться   Развлекательный портал CN.ru - Форум > Технологии > Программирование > Начинающим

Ответ
 
Опции темы
Старый 03.07.2007, 21:27 ↑ #51
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

О Мудрейшие! подскажите plz как сделать чтобы при выводе русского текста (при помощи puts или printf) получалось то что я хотел, а то получатся каката абракадабра
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 03.07.2007, 23:01 ↑ #52
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Нужно, чтобы была настроена так называемая локаль.
Проверка, что она настроена правильно - наблюдение результата выполнения
команды date

>date

Втр Июл 3 23:53:42 NOVST 2007

Если вместо русских букв что-то другое - надо её (locale) настраивать.

Сейчас в моде переход на UNICODE, в частности на utf8.
Русские буквы в utf8 кодируются многобайтными последовательностями,
но с точки зрения синтаксиса - остаются символами. Это, конечно, условность.
С появлением на сцене Utf8 слова "байт" и "символ" - больше не синонимы.
Надо убедиться, что компилятор достаточно новый и понимает это обстоятельство. Если не понимает - обновить его.
__________________

Дышите думайте глубже, вы взволнованы умны.
Hogofogo вне форума   Ответить с цитированием
Старый 04.07.2007, 23:23 ↑ #53
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

-ввел в командной строке >date, а он мне:
Текущая дата:05.07.07
Введите новую дату (дд-мм-гг):
-если я правильно понял, то локаль настроена верно. дальше-то че делать???
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 05.07.2007, 09:45 ↑ #54
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Что система отвечает на команду
>locale
у меня вот например
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES=POSIX
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Потом откомпилировать тестовую программу и посмотреть в "кишки"
во что превратились строковые константы на русском языке.

программа к примеру такая

#include <stdio.h>

int main( short argc, char *argv[])
\** static int ii=0xaaaaaaaa; //это чтобы быстро найти блок данных в кодах
static char cc[]="1234567890_qwertyuiop_фывапролджэ" ;
ii = 0x55555555;
puts( cc);
}

Что получается?

вот кусочек дампа файла proga.o

00000080 31 32 33 34 35 36 37 38 39 30 5F 71 77 65 72 74 1234567890_qwert
00000090 79 75 69 6F 70 5F D1 84 D1 8B D0 B2 D0 B0 D0 BF yuiop_..........
000000A0 D1 80 D0 BE D0 BB D0 B4 D0 B6 D1 8D 00 00 00 00 ................
000000B0 AA AA AA AA 00 47 43 43 3A 20 28 47 4E 55 29 20 .....GCC: (GNU)

Каждая русская буква превратилась в два байта, но функция puts об этом должна знать и вот что она выводит:

1234567890_qwertyuiop_фывапролджэ

\** - это открывающая фигурная скобка, автоматической цензуре кажется что это похоже на "***"
__________________

Дышите думайте глубже, вы взволнованы умны.

Последний раз редактировалось Hogofogo; 05.07.2007 в 09:52.
Hogofogo вне форума   Ответить с цитированием
Старый 05.07.2007, 19:37 ↑ #55
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

команда locale неизвестна

Последний раз редактировалось AMAP-KALLIMAP; 05.07.2007 в 19:43.
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 05.07.2007, 19:41 ↑ #56
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
**
static int ii=0xaaaaaaaa; //
static char cc[]="1234567890_qwertyuiop_фывапролджэ" ;
ii = 0x55555555;
puts( cc);
getch ();
return 0;
}
в результате на печати после символа "_" непонятщина
а что такое дамп и где его смотреть?
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 05.07.2007, 21:21 ↑ #57
c0cucka
новый эго-житель
 
Регистрация: 27.12.2006
Сообщений: 8
Репутация: 0
c0cucka молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

Чувак, забей. Для вывода в консоль просто используется другая кодировка, а не Юникод. Hogofogo тебе пихает оптимальное (читай — без бубна) решение для никсов. В Виндоуз же проще всего перевести кирилицу из кодировки 1251 в 866 (обе однобайтовые, но в 866 входят псевдографические символы — в 1251 они за ненадобностью заменены полиграфическими).

Самый простой способ — воспользоваться нормальным редактором с подсветкой синтаксиса и поддержкой различных кодировок (самые, пожалуй, популярные у профи: UltraEdit и EmEditor. Есть еще Bred3, он зато бесплатен).

Второй (кустарный) способ:
1. Открываем командную строку: Пуск -> Выполнить...
2. Пишем: cmd
3. Пишем: echo Наша мега строка по-русски > 1.txt
4. Открываем созданный файл в Блокноте и копируем оттуда "белеберду", которая на самом деле наша строка, но отображена она другой кодировке. Для прикола:
1. В Блокноте жмакаем Формат -> Шрифт
2. Выбираем досовский шрифт, например, Terminal.
3. Видим нашу строку по-человечески.
4. Чешем репу.

Последний раз редактировалось c0cucka; 05.07.2007 в 21:23.
c0cucka вне форума   Ответить с цитированием
Старый 05.07.2007, 23:17 ↑ #58
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Цитата:
что такое дамп и где его смотреть?
У-у, а я похоже не врубился, что эта тема не линуксовая...

Дурота с кодировками в консоли - одна из причин, по которым я давно-давно
бросил серьёзные отношения с виндой.

В вижуал студии, помню нашёл доморощенное решение, как сделать, чтобы в редакторе текста программы буковки совпадали с тем, что будет выводиться на экран - приживлял к студии на время работы с консольными приложениями
шрифт курьер с кодировкой 866, и всё было в шоколаде. Файл шрифта помещается в системную папку fonts, а потом в настройках студии выбирается как шрифт для окон с исходным текстом программ. Этот курьер у меня где-то валяется до сих пор, сейчас поищу. Но я не уверен, что это решение и было задумано разработчиками.

А дамп - это режим просмотра файла, когда вместо символа выводится его код в гексадецимальном виде, этот вид включается например в "фар менеджере" нажатием F4 после того как вызвали просмотр файла кнопкой F3.
Вложения
Тип файла: rar coure866.rar (5.6 Кб, 18 просмотров)
__________________

Дышите думайте глубже, вы взволнованы умны.

Последний раз редактировалось Hogofogo; 05.07.2007 в 23:24.
Hogofogo вне форума   Ответить с цитированием
Старый 06.07.2007, 11:01 ↑ #59
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

а я работаю в С++ Builder 6,где менять эти настройки?
я пробовал в Инструменты->Опции инструментов перевода... на вкладке Шрифты поставил язык Русский, Шрифт... - Courier (тот что закинул в C:\windows\fonts\) и ничего не изменилось (и вообще если менять эту настройку нифига не происходит).
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 06.07.2007, 15:13 ↑ #60
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

еще у меня такая проблема:
компилятор пишет что ему не известна функция delay () (использую заголовочный файл <dos.h>)
AMAP-KALLIMAP вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Текущее время: 15:58. Часовой пояс GMT +6.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot

ВКонтактeTwitterFacebook
Хотите связаться с нами? Напишите письмо, и мы обязательно ответим.