Вопросы и ответы по программированию.

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#196 Сообщение 06.03.2012, 23:53

если я из класса A вызываю метод класса B который вызывает метод класса A то если этот метод обращается к переменным класса то
то дизайн твоей программы совершенно непродуман. не лезь в классы, без них таких проблем не будет.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#197 Сообщение 11.03.2012, 07:59

На делфе ест следующий код:

Код: Выделить всё

pStreamMethods = ^TStreamMethods;
  TStreamMethods = packed record
    fSeek: function(Strm: TStream; MoveTo: TStrmMove; MoveMethod: TMoveMethod): TStrmSize;
    fGetSiz: function(Strm: TStream): TStrmSize;
    fSetSiz: procedure(Strm: TStream; Value: TStrmSize);
    fRead: function(Strm: TStream; var Buffer; Count: TStrmSize): TStrmSize;
    fWrite: function(Strm: TStream; const Buffer; Count: TStrmSize): TStrmSize;
    fClose: procedure(Strm: TStream);
    fCustom: Pointer;
    fWait: procedure(Strm: TStream);
  end;

Код: Выделить всё

var
  BaseFileMethods: TStreamMethods = (
    fSeek: SeekFileStream;
    fGetSiz: GetSizeFileStream;
    fSetSiz: SetSizeFileStream;
    fRead: ReadFileStream;
    fWrite: WriteFileStream;
    fClose: CloseFileStream;
    fCustom: nil;
  );
Можно ли на С++ сделать подобное объявление для BaseFileMethods (структура описана, методы то же написаны, осталось только статическую структуру завести, а как сделать ее изначально заполненной - без понятия :( ).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#198 Сообщение 11.03.2012, 12:39

andreil
Для этого есть интерфейсы и наследования. Запили интерфейс из TStreamMethods и потом определяй функции в унаследовавшем сей интерфейс классе.

Аватара пользователя
Rama
Модератор
Модератор
Сообщения: 1143
Зарегистрирован: 28.03.2008
Благодарил (а): 389 раз
Поблагодарили: 240 раз
Контактная информация:

#199 Сообщение 26.03.2012, 10:22

Как заставить кириллицу корректно считываться в VS C++?
Прописал setlocale (LC_ALL, "rus"), но это дало только корректный вывод (напрямую или из константного массива, например).
При считывании в переменную записываются какие-то иероглифы.

Аватара пользователя
ArsNG
Полковник
Полковник
Сообщения: 3059
Зарегистрирован: 20.12.2007
Благодарил (а): 1069 раз
Поблагодарили: 2893 раза

#200 Сообщение 26.03.2012, 11:51

Skazlazhop

setlocale(LC_ALL, ".866");
(вывод кириллицы будет плохим)
Учитывай, что в DOS кодировка не такая, как в Win. Проще будет написать ф-ию по переводу из одной кодировки в другую, CharToOem вроде.
А еще правильнее вообще не использовать русский.

Аватара пользователя
Rama
Модератор
Модератор
Сообщения: 1143
Зарегистрирован: 28.03.2008
Благодарил (а): 389 раз
Поблагодарили: 240 раз
Контактная информация:

#201 Сообщение 26.03.2012, 20:35

ArsNG
Ок, нагуглил такое:

Код: Выделить всё

{
string temp;
setlocale(LC_ALL,".1251");
cin >> temp;
setlocale(LC_ALL,".866");
cout << temp;
return 0;
}
Корректно выводит ту кириллицу, которая была введена.
НО в переменной temp эта кириллица хранится в виде несуразицы. Например если ввести "Выход" - в temp будет "‚л室"

Наверное я некорректно задал вопрос, перефразирую:
Как заставить введенную кириллицу хранится в корректной форме в ячейке?

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#202 Сообщение 26.03.2012, 21:25

Кириллица обычно не 1 байт на символ, а 2. Тебя интересуют функции, работающие с многобайтными кодировками.
И да, русский не нужен.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
Pr0Ger
Модератор
Модератор
Сообщения: 1829
Зарегистрирован: 16.01.2009
Благодарил (а): 17 раз
Поблагодарили: 214 раз
Контактная информация:

#203 Сообщение 26.03.2012, 21:29

Skazlazhop
смотри в чем фишка
виндовая консоль чрезвычайна крива, и использует в качестве кодировки не юникод, ни cp1251, ни даже cp1252, а cp866 (в русской винде, или с включенной русской локалью), которая использовалась в DOS еще

и поэтому возникают такие несоответствия, ибо с консоли прочитало в одной, а дебаггер показывает исходя из того, что это другая кодировка

и вообще говоря, оно сохранено корректно, просто для правильной интерпретации нужно знать в какой кодировке оно записано

так-что либо оставь все так как есть, либо переконвертируй это в нужную, либо не вводи кириллицу из консоли
если-что правильный вариант третий

именно поэтому кстати в Python 3 строки сделали юникодными, а то что раньше назывался строками стало bytes/bytearray

Аватара пользователя
Rama
Модератор
Модератор
Сообщения: 1143
Зарегистрирован: 28.03.2008
Благодарил (а): 389 раз
Поблагодарили: 240 раз
Контактная информация:

#204 Сообщение 26.03.2012, 22:27

Вся соль в том, что на лабах дали доп. задание, в котором нужно вывести некий ответ на запрос, а т.к. основное задание подразумевало только числовой ввод, я сделал все потроха кириллицей. Ну и собственно препод ждет от меня именно сохранения диалога на великом и могучем, потому что как он сказал сам не знает, но ему интересно.
А уже в самом крайнем случае pridetsja peredelyvat' vse pod translit -_-

Всем выше и ниже отписавшимся спасибо, тему апать не буду, пойду попробую что-нибудь сделать.
Последний раз редактировалось Rama 26.03.2012, 22:52, всего редактировалось 1 раз.

Аватара пользователя
Monk
VIP
VIP
Сообщения: 4713
Зарегистрирован: 21.11.2009
Благодарил (а): 418 раз
Поблагодарили: 1053 раза
Контактная информация:

#205 Сообщение 26.03.2012, 22:28

Так ты же починил кириллицу на ввод и вывод, нэ?
«По ночам компьютеры собираются вместе и смеются над людьми, если те делают работу, которую могли бы делать компьютеры» (с) habrahabr
 
[hide_num=64]Изображение
Изображение

Не стоит становиться на одно колено ради девушки, которая ради тебя не готова встать на два. (С)
640K ought to be enough for anybody (с) BG[/hide_num]

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#206 Сообщение 26.03.2012, 22:38

Skazlazhop
Для того чтобы кириллица хранилась в корректной форме, нужно сначала определить понятие корректная форма, а для этого - определить в каких типах данных вам нужно работать - то есть выбрать внутреннюю кодировку строк (если конечно вам нужна кириллица в строках ;), но скорее всего вам нужна именно она).

Лучше всего использовать Unicode и его кодировку UTF-8 - это во-первых хороший стиль, а во-вторых хорошая универсальность.

Внутренняя кодировка - это то, как строки буду храниться внутри вашей программы - то есть вы читаете строки в любой кодировке, потом приводите их к нужной и помещаете в память куда надо, и уже потом с ними работаете. При выводе - также только в обратном порядке.

PS: так выглядит правильный подход к решению проблемы, в случае, если впрямую делать лень, можно использовать всевозможные хаки... например сделать свой класс стримов, который вызывет смену локали для ввода-вывода... но по-хорошему, в вашем случае, нужно приводить при чтении 866 (стандартная консольная кодировка винды) к 65001 (UTF-8).

Аватара пользователя
kinders666
Модератор
Модератор
Сообщения: 4163
Зарегистрирован: 25.10.2006
Откуда: Москва
Благодарил (а): 537 раз
Поблагодарили: 191 раз

#207 Сообщение 28.03.2012, 14:35

Нужна помощь с Visual Basic 2010
Нужно сделать так, чтоб программа брала сведения из сети (например отсюда: http://pogoda.yandex.ru/moscow?ncrnd=7325) о температуре в Москве, потом записывала её в переменную. Не очень разбираюсь в интернет-функциях, кто поможет?
Сгодится любой другой сайт с информацией о погоде.
Изображение
Изображение

Аватара пользователя
Monk
VIP
VIP
Сообщения: 4713
Зарегистрирован: 21.11.2009
Благодарил (а): 418 раз
Поблагодарили: 1053 раза
Контактная информация:

#208 Сообщение 28.03.2012, 16:56

грабь страничку, работай со строкой.
«По ночам компьютеры собираются вместе и смеются над людьми, если те делают работу, которую могли бы делать компьютеры» (с) habrahabr
 
[hide_num=64]Изображение
Изображение

Не стоит становиться на одно колено ради девушки, которая ради тебя не готова встать на два. (С)
640K ought to be enough for anybody (с) BG[/hide_num]

Аватара пользователя
Squaller
Лейтенант
Лейтенант
Сообщения: 182
Зарегистрирован: 10.02.2012
Благодарил (а): 10 раз
Поблагодарили: 4 раза
Контактная информация:

#209 Сообщение 28.03.2012, 18:27

Народ,кто нибудь может помочь написать данную программу,думаю для знающих это дело 5 минут.
Мне нужно,чтобы эти кнопки на скрине Ctrl + C копировали текст из полей в буфер.Все остальное не важно.Заранее спасибо
Я делал на PHP.Но мне без разницы на каком языке будет сделана программа,главное чтобы работала и можно было запускать несколько копий программы,в моем случае это три
Вот сама программа (Скрин)
Последний раз редактировалось Squaller 28.03.2012, 18:27, всего редактировалось 4 раза.
Причина: Язык программирования?
Изображение

Аватара пользователя
ArsNG
Полковник
Полковник
Сообщения: 3059
Зарегистрирован: 20.12.2007
Благодарил (а): 1069 раз
Поблагодарили: 2893 раза

#210 Сообщение 28.03.2012, 18:57

Squaller
c#
http://rghost.ru/37276356
вроде сделал как у тебя на скриншоте, .net 2.0

Ответить Вложения 1