Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 026
от 24.06.2002, 15:10

Администратор:
Имя: Коробов Н.А.
URL: Информационный ресурс
ICQ: 365124
Украина, Днепропетровск
О рассылке:
Задано вопросов: 86
Отправлено ответов: 148
Активность: 172.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

Vladimir
Статус: Опытный
Общий рейтинг: 129.68
Телефон: (08242) 43599 40099 раб 41255 дом
[Подробней >>]
pin
Статус: Доверительный
Общий рейтинг: 138.88
[Подробней >>]
Gibbel
Статус: Опытный
Общий рейтинг: 109.75
URL: Страничка обо мне и моих друзьях
[Подробней >>]
 
vitya
Статус: Опытный
Общий рейтинг: 117.28
[Подробней >>]
kvINT
Статус: Опытный
Общий рейтинг: 114.85
[Подробней >>]
dmi
Статус: Начальный
Общий рейтинг: 120
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 121.1
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
bin
Статус: Доверительный
Общий рейтинг: 103.54
[Подробней >>]
Blackeye
Статус: Профессиональный
Общий рейтинг: 118.51
URL: Delphi, my programms...
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 77. Здравствуйте эксперты, подскажите что надо сделать чтобы в консольных приложениях русские буквы выво... (ответов: 7)
Вопрос № 78. Еще раз доброго времени суток, у меня такой вопрос: есть переменная типа char, при инструкции cin>>V... (ответов: 3)
Вопрос № 79. Это снова я,цитирую: vitya> Вызывай функцию типа AnsiToOem или OemToAnsi тогда vitya> будут серьезны... (ответов: 3)

Вопросов: 3, ответов: 13


 Вопрос № 77

Здравствуйте эксперты, подскажите что надо сделать чтобы в консольных приложениях русские буквы выводидись вместо крякозябл? И еще вопрос: массивы типа char a[]; можно как нибудь прировнять к строке простой операцией присваивания или это через фор надо делать- копировать один массив в другой?
Спасибо.



Вопрос отправлен: 21.06.2002, 03:39
Отправитель: Serzhant (Serzhant_mail@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Vladimir

Доброе время суток, Serzhant!
Если массив заканчивается '', то он уже является строкой. А в другой массив его можно скопировать стандартной функцией strcpy(char *с, char *s). include string.h.


Ответ отправлен: 24.06.2002, 10:58
Отправитель: Vladimir


Отвечает pin

Доброе время суток, Serzhant!
Русские буквы: подумай о кодировке!
Прировнять нет!!!


Ответ отправлен: 23.06.2002, 14:10
Отправитель: pin


Отвечает Gibbel

Добрый день, Serzhant!
1. Настрой кодовую страницу
2. Приравнивать просто так нельзя никакие типы массивов. Используй memcpy или strcpy

Ответ отправлен: 21.06.2002, 09:55
Отправитель: Gibbel


Отвечает vitya

Добрый день, Serzhant!

Вызывай функцию типа AnsiToOem или OemToAnsi тогда будут буковки что надо. Можно копировать с помощью for можно с помощью while, но серьезные люди просто вызывают функцию
strcpy(), a присваивать нельзя

Ответ отправлен: 21.06.2002, 08:31
Отправитель: vitya


Отвечает kvINT

Доброе время суток, Serzhant!
С кракозяблами по-видимому бороться можно лишь так (меня тоже в свое время это достало) - писать в программе кракозяблами, не обращая внимания на то, что на экране (главное - по клавишам не промахиваться). Зато программа будет выводить русские буквы.
По поводу копирования - не обязательно через for, используй string.h, там много всяких ф-ций типа strcpy (скопировать строку). Также можешь написать или где-то найти свой класс, в котором будет перегружена операция присваивания для строк, тогда сможешь использовать "=".


Ответ отправлен: 21.06.2002, 13:46
Отправитель: kvINT


Отвечает dmi

Здравствуйте, Serzhant!
Есть в MFC очень-приочень полезный классик - CString с целой кучей самых необходимых функций-членов.
А пользоваться им так:
CString str1="строка1";
CString str2="строка2";
...
CString str=str1+str2;

Ответ отправлен: 21.06.2002, 12:44
Отправитель: dmi


Отвечает baldr

Доброе время суток, Serzhant!
Консольные приложения выполняются в окне DOS. И, следовательно, кодировка там используется
DOS'овская. То есть, весь текст, что Вы выводите на экран должен быть заранее переведен в
oem866-кодировку... Есть, конечно, еще способ... Он заключается в установке другой кодовой
страницы для DOS-режима, но учтите, что такая программа будет работать только у Вас.
Если чувствуете себя кулхацкером, можете и свои матричные шрифты использовать для вывода..
Теперь про массивы... Можно... НО! Если только перегрузить операцию присваивания для
указателей данного типа. В противном случае Вы получите не два разных массива, а один, но с
двумя ссылками на него... И то не всегда. А FOR тут необязателен. Если массив - простая
последовательность подряд идущих значений в памяти - поможет функция memmov. memcpy я не
рекомендую использовать, ибо она некорректно работает с перекрывающимися областями памяти.


Ответ отправлен: 23.06.2002, 00:49
Отправитель: baldr


 Вопрос № 78

Еще раз доброго времени суток, у меня такой вопрос: есть переменная типа char, при инструкции cin>>ValueTypeChar она устанавливется в 0x31, если я ввел еденицу, что надо сделать чтобы она устанавливалась в 0x01? Может есть какая нибудь функция принимающая код символа и возвращающая символ?
p.S. Если есть у кого описание функций из string.h вышлите пожалуйста или дайте линк откуда можно слить.
Спасибо.



Вопрос отправлен: 21.06.2002, 05:37
Отправитель: Serzhant (Serzhant_mail@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает bin

Дмюоме аоекз ъяпми, Serzhant!
Еъпщ мнуъчлуе р-ух дйз TURBO C 3.0 (лч ояъъимк).
Аьъьйчпщ???

Ответ отправлен: 21.06.2002, 08:32
Отправитель: bin


Отвечает vitya

Доброе время суток, Serzhant!
Когда ты вводишь 1 с консоли в переменную типа char, то туда записывается символ '1' а не 1 как число. Решить проблему можно двояко: либо вычесть из полученного значение 0x30, либо сделать заместо char сделать переменную типа int.

Ответ отправлен: 21.06.2002, 08:38
Отправитель: vitya


Отвечает kvINT

Здравствуйте, Serzhant!
Т.е. ты хочешь преобразовать char в int?
В библиотеке stdlib.h функция atoi.
int atoi(const char* nPtr) - преобразует строку nPtr в тип int. Т.е. переменную деляй не char, а строкой (char*).
Описания ф-ций из всех библиотек есть в хелпе к компилятору, ес-но на аглицком, выделяешь в тексте прг-мы функцию и жмешь F1.

Ответ отправлен: 21.06.2002, 13:47
Отправитель: kvINT


 Вопрос № 79

Это снова я,цитирую:
vitya> Вызывай функцию типа AnsiToOem или OemToAnsi тогда vitya> будут серьезные люди просто вызывают функцию
vitya> strcpy(), a присваивать нельзя
можно по подробнее про эти функции? В частности какие параметры они принимают и что возвращают.
vitya> вычесть из полученного значение 0x30, либо сделать vitya> заместо char сделать переменную типа int.
это не подходит, тип int отпадает сразу т.к. у меня структура длиною 4 байта (чтоб в регистр влазила), а отнимать тоже не выход, тоды придется два раза ввод вызывать
(для старшей и младшей тетрад байта), можно конечно, но не нравиться мне так, есть еще какие нибудь варианты?
И еще вопрос, пишу что-то вроде
void proc(void)
{
asm команда1;
asm команда2;
asm команда3;
}
компилятор ругается:
syntax error : identifier команда1
syntax error : identifier команда2
syntax error : identifier команда3
Может я подключить что-то забыл?
Если да то что?
Как вообще в C++ делать вставки на асме?
Спасибо.
P.S. может все-таки урл на ресурс по библиотекам C++?
P.S.S Пользуюс Visual C++ 6.0




Вопрос отправлен: 21.06.2002, 09:53
Отправитель: Serzhantt (Serzhantt_mail@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Blackeye

Доброе время суток, Serzhantt!
Мда... а зачем то asm писать перед каждой командой? Смотри приложение

Приложение:

Ответ отправлен: 21.06.2002, 21:43
Отправитель: Blackeye


Отвечает vitya

Добрый день, Serzhantt!
BOOL CharToOem(
LPCTSTR lpszSrc, // string to translate
LPSTR lpszDst // translated string
);
Это более новая версия тех функция, что я послал.
Обратная берет теже самые параметры.
Далее strcpy(char * pDest, const char * pSource) ;
в начале куда, потом откуда.
На VC делай так
__asm
{
mov ax, 3;
int 32h;
}


Ответ отправлен: 21.06.2002, 10:05
Отправитель: vitya


Отвечает dmi

Доброе время суток, Serzhantt!
Вот лично я делаю так:
_asm
{
in al,0x61
mov al,0xff и т.д.
}
т.к. вроде в синтаксисе этого асма подмешан и синтаксис С++

Ответ отправлен: 21.06.2002, 12:55
Отправитель: dmi



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (49)
C / C++ (29)
Perl (9)
Delphi (17)
Pascal (27)
Basic / VBA (16)
Java / JavaScript (6)
PHP (8)
MySQL / MSSQL (9)
Пользователю
Windows 95/98/Me (46)
Windows NT/2000/XP (34)
"Железо" (39)
Поиск информации (21)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (9)
Юристу
Гражданское право (11)
Семейное право (5)
Трудовое право (6)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное