Здравствуйте эксперты, подскажите что надо сделать чтобы в консольных приложениях русские буквы выводидись вместо крякозябл? И еще вопрос: массивы типа char a[]; можно как нибудь прировнять к строке простой операцией присваивания или это через фор надо делать- копировать один массив в другой? Спасибо.
Доброе время суток, 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 вышлите пожалуйста или дайте линк откуда можно слить. Спасибо.
Дмюоме аоекз ъяпми, 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
Доброе время суток, 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.