C++Builder
Начало
Форум
Помощь
Войти
Регистрация
C++Builder
>
Forum
>
Вопросы программирования
>
Общие вопросы программирования в C++Builder
>
Вывод таблицы символов ASCII в консоли
Страниц: [
1
]
Вниз
Печать
Автор
Тема: Вывод таблицы символов ASCII в консоли (Прочитано 8799 раз)
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Вывод таблицы символов ASCII в консоли
«
:
27 Ноябрь 2011, 12:27:31 »
Всем добрый день!
Не знаю в правильный ли раздел я пишу)
Ситуация в следующем. Пишу простую консольную программу на C++ Builder 6. Программа выводит символ ASCII по введенному коду.
Код:
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include
#include
//---------------------------------------------------------------------------
#pragma argsused
void ascii(int n)
{
if(n>=0 && n<256)
{
cout<<"\nSimvol sootv ASCII codu "<
}
else
cout<<"\nError";
}
void main()
{
int n=0;
cout<<"Vvedite n\n";
cin>>n;
ascii(n);
getch();
}
Проблема заключается в том, что символы с кодами:
7 - BEL
8 - BS
9 - HT
10 - LF
13 - CR
На экран не воводятся, вместо этого программа совершает действия закрепленные за ними (перевод строки, табуляция, возврат каретки и т.д.).
Можно ли как-то все-таки заставить ее не выполнять эти действия а выводить сами символы?
Заранее благодарю.
Записан
Nikita
Участник
Сказали спасибо: +6/-1
Offline
Сообщений: 476
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #1 :
27 Ноябрь 2011, 13:26:34 »
Попробуй выводить через
printf
, не уверен но попробовать стоит.
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #2 :
27 Ноябрь 2011, 13:42:31 »
Пробовал и через printf, и через putch, не помогает
Выводит все символы нормально кроме этих 5-ти.
Записан
Nikita
Участник
Сказали спасибо: +6/-1
Offline
Сообщений: 476
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #3 :
27 Ноябрь 2011, 15:36:58 »
попробуй функцию
putc
, только выходной поток открой в двоичном режиме.
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #4 :
27 Ноябрь 2011, 17:46:30 »
Имеется в виду запись в двоичный файл а потом считывание из него? Если да, то тоже пробовал, а если нет, то можно поподробней, что имеется в виду и как это делается?
«
Последнее редактирование: 27 Ноябрь 2011, 18:01:06 от HARARA
»
Записан
Nikita
Участник
Сказали спасибо: +6/-1
Offline
Сообщений: 476
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #5 :
27 Ноябрь 2011, 19:15:29 »
Вообще то все файлы двоичные. Чтобы двоичный файл был текстовым его нужно открыть как текстовый, тогда "перевод строки-возврат каретки" будет печататься одним символом а не двумя.
Вывод на консоль идет как текстовый вывод, следовательно нужно сделать этот вывод двоичным ,тогда должно все печататься как есть. Я сам не пробовал так, но мысли такие, думаю копать в эту сторону нужно.
А то что ты выводил в файл а потом считывал с него то это бессмысленно, в файле все хранится в двоичном виде, а вот как потом открывать этот файл (двоичный или текстовый) от этого и зависит отображение некоторых символов.
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #6 :
27 Ноябрь 2011, 19:46:01 »
Пробовал открывать и в двоичном и в текством, все равно та же фигня.
Записан
Kray74
Посты на падонкаффском принципиально не читаю.
Участник
Сказали спасибо: +81/-1
Offline
Сообщений: 366
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #7 :
27 Ноябрь 2011, 20:43:48 »
А что вы хотите увидеть, печатая эти символы (7, 10, 13 и т.д.)? Для них не существует видимого изображения.
Записан
Nikita
Участник
Сказали спасибо: +6/-1
Offline
Сообщений: 476
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #8 :
27 Ноябрь 2011, 20:54:32 »
Цитата: HARARA от 27 Ноябрь 2011, 19:46:01
Пробовал открывать и в двоичном и в текством, все равно та же фигня.
Когда ты открываешь файл как двоичный, то и символы
считываются
как двоичные, а когда ты их пытаешься отобразить на своей консоли то они отображаются как
текстовые
.
Записан
volvo877
Глобальный модератор
Сказали спасибо: +736/-1
Offline
Сообщений: 891
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #9 :
27 Ноябрь 2011, 21:41:06 »
Цитировать
Для них не существует видимого изображения.
Специально для таких целей существует ключик MB_USEGLYPHCHARS, заставляющий функции вывода (типа WriteConsole для консольных приложений или TextOut для виндовых) трактовать управляющие символы как печатаемые. У Каплана в блоге было, и вот тут тоже...
Все, что нужно сделать - это записать символ в char, сконвертировать его с этим ключом в WideChar и вывести в консоль.
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #10 :
28 Ноябрь 2011, 08:24:04 »
Посмотрите правильно ли пишу.
Код:
int MultiByteToWideChar(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCSTR lpMultiByteStr,
__in int cbMultiByte,
__out LPWSTR lpWideCharStr,
__in int cchWideChar
);
Объявляю две переменные
Код:
char ch[255];
char ch2[255];
В качестве первого аргумента указываю
CP_ACP
В качестве второго
MB_USEGLYPHCHARS
В качестве третьего указываю строку в которую записал символ
ch
В качестве четвертого пишу размер, т.к. символ один то пишу
255
В качестве пятого указываю строку в которую записывается результат
ch2
В качестве шестого пишу его размер
255
Получается что-то типа:
Код:
MultiByteToWideChar(CP_ACP, MB_USEGLYPHCHARS, ch, 255, ch2, 255)
Выдает две ошибки:
Cannot convert 'char *' to 'wchar_t *
Type mismatch in parameter 'lpWideCharStr' (wanted 'wchar_t *', got 'char *')
Записан
moskk
-Кто же это ходит за мёдом с воздушными шариками?
Участник
Сказали спасибо: +17/-4
Offline
Сообщений: 264
-Я хожу.
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #11 :
28 Ноябрь 2011, 09:26:07 »
Код:
wchar_t ch2[255];
, очевидно же.
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #12 :
28 Ноябрь 2011, 12:04:25 »
Цитата: moskk от 28 Ноябрь 2011, 09:26:07
Код:
wchar_t ch2[255];
, очевидно же.
Туплю, просто)
Вообщем сделал так
Код:
char ch[255];
wchar_t ch2[255];
ch[0]=n;
MultiByteToWideChar(CP_ACP, MB_USEGLYPHCHARS, ch, 255, ch2, 255);
printf("\n %c", ch[0]);
Все равно даёт тот же результат, выводит всё кроме этих символов.
Через WriteConsole тоже самое.
Записан
volvo877
Глобальный модератор
Сказали спасибо: +736/-1
Offline
Сообщений: 891
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #13 :
28 Ноябрь 2011, 12:15:57 »
Цитировать
Все равно даёт тот же результат
Естественно. Ты ж выводишь опять тот же самый, неконвертированный символ. Выводить надо wchar_t, а не char, в этом все и дело.
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #14 :
28 Ноябрь 2011, 12:41:06 »
Собственно и вывод wchar_t даёт тот же самый результат.
Записан
volvo877
Глобальный модератор
Сказали спасибо: +736/-1
Offline
Сообщений: 891
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #15 :
28 Ноябрь 2011, 14:26:29 »
Собственно, я, конечно, тебе верю, но почему-то я вижу тут BULLET... Что я делаю не так все время?
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #16 :
29 Ноябрь 2011, 07:59:22 »
Это безусловно сильное колдовство
Ниче не понимаю, уже полностью переписал, а результат тот же. Видимо не судьба
Код:
#include
#pragma hdrstop
#pragma argsused
#include
#include
#include
#include
using namespace std;
void ascii(int n)
{
if(n>=0 && n<256)
{
char s[2]={0};
DWORD nWrote;
WCHAR msg[2];
s[0]=(unsigned char)n;
HANDLE StdIO=GetStdHandle(STD_OUTPUT_HANDLE);
MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED|MB_USEGLYPHCHARS,
(LPCSTR)s,2,
msg,2);
COORD dwCursorPosition={3,1};
SetConsoleCursorPosition(StdIO,dwCursorPosition);
WriteConsoleW(StdIO, &msg, 2, &nWrote, NULL);
}
else
cout<<"\nError";
}
int _tmain()
{
int n=0;
cout<<"Vvedite n\n";
cin>>n;
ascii(n);
getch();
}
//---------------------------------------------------------------------------
Записан
volvo877
Глобальный модератор
Сказали спасибо: +736/-1
Offline
Сообщений: 891
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #17 :
29 Ноябрь 2011, 11:30:50 »
Цитировать
Это безусловно сильное колдовство
Не во всяком шрифте есть эти символы.
Это "колдовство" называется "Lucuda Console" (обрати внимание на приписку:
"It is a variant of Lucida Sans Typewriter with smaller line spacing,
and added WGL4 character set
."
Вот его то, Windows Glyph List, нам и надо. Именно там все эти глифы присутствуют). Поэтому у меня всегда для консоли выставлен именно этот шрифт.
Записан
HARARA
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 14
Re: Вывод таблицы символов ASCII в консоли
«
Ответ #18 :
29 Ноябрь 2011, 11:43:40 »
Заработало
volvo877
Огромное Вам спасибо, что наставили меня дурака на путь истинный!!!
Записан
Страниц: [
1
]
Вверх
Печать
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Вопросы программирования
-----------------------------
=> Общие вопросы программирования в C++Builder
=> Программирование с FMX
=> Работа с базами данных в C++Builder
=> Windows API
=> Технологии COM/DCOM, ActiveX
=> Аспекты и идеология профессиональной разработки ПО
=> Компьютерное железо и системное администрирование
=> студенческий городок
-----------------------------
Обсуждение материалов на сайте
-----------------------------
=> Обсуждений статей на сайте
=> Обсуждение материалов из файлового архива
=> Компоненты сторонних разработчиков к С++Builder
-----------------------------
Работа сайта и новости
-----------------------------
=> Ищу/предлагаю работу
=> Новости из мира программирования
=> Новости - события календаря
=> Голосования
=> Компьютерный юмор и приколы
=> Работа сайта
=> Флейм
-----------------------------
FAQ - частозадаваемые вопросы/ответы
-----------------------------
=> FAQ, общие вопросы, посвящённые C++Builder
=> FAQ, вопросы по базам данных
=> FAQ, вопросы по компонентам
Загружается...