2016-11-07 9 views
0

Я учусь сейчас, и я получил это домашнее задание/задача сделать:Borland C++ функции консоли

1) Если нажать клавишу CTRL + L, все числовые символы должны изменить цвет.

2) Если вы нажмете клавишу CTRL + S, вы получите длину слова слева от курсора.

Я нашел эту функцию int bioskey(int cmd); Итак, теперь я могу проверить, нажата ли клавиша, но как изменить цвет только числовых символов или прочитать слова с консоли, чтобы получить их длину?

+4

Хороший вопрос. Прошло около 20 лет с тех пор, как я использовал Turbo C++. – user4581301

+0

Получите современный компилятор. –

+1

Вы делаете это так же, как и для Object Pascal, Perl или B. Серьезно, * получите более современный компилятор *. – Bathsheba

ответ

1

Некоторые из нас до сих пор помню MS-DOS (пусть это будет пухом или куски ...)

, если вы действительно в MS-DOS, то вы не можете ожидать, что содержание консоль будет изменена в цвета только для определенных областей. Тебе нужно сделать это сами. Проблема в том, что мы ничего о вашем фоне проекта не знаю, так что мы не знаем, что и как представлен ваш материал, оказывается/outputed/... и т.д. занесены

Я предполагаю EGA/VGA BIOS текстовый режим используется поэтому вы можете использовать прямой доступ к VRAM. Поэтому вам нужно установить указатель на адрес B800:0000 и обрабатывать его как массив, где каждый символ на экране имеет 2 BYTE. один атрибут цвета, а другой ASCII код (не уверен, в каком порядке больше) ...

Так уже оказанные вещи просто:

  1. петля через весь экран

    обычно 80x25x2 Б

  2. тесты каждый ASCII-альфа числового значения

    так ASCII code >= '0' и code<='9' для чисел или добавить все материалы, которые вы рассматриваете, как буквенно-цифровые, как code>' ' и code<='9'.

  3. изменить цвета для выбранных символов

    только путем изменения атрибутов байт.

Когда вы положили его вместе для чисел будет выглядеть следующим образом:

char far *scr=(char far*)0x0B0000000; 
int x,y,a; 
for (a=0,y=0;y<25;y++) 
for (x=0;x<80;x++,a+=2) 
    if ((scr[a+0]>='0')&&((scr[a+0]<='9')) 
    { 
    scr[a+1]=7; //attribute with the different color here 
    } 

, если он не работает, чем пытаться своп scr[a+0] и scr[a+1]. Если возникло исключение, вы не находитесь в MS-DOS, и у вас нет доступа к VRAM. В этом случае используйте DOS-BOX или драйвер, который позволяет получить доступ к памяти, например dllportio ... Для получения дополнительной информации см некоторые более или менее связанных с QA-х:

Если у вас есть проблемы с обнаружением CTRL+Key не уверен, что если в сборке функции в TC++ позволяет CTRL (было слишком давно), вы можете использовать BIOS или даже подключить клавиатуру ISR. См. Вторую ссылку, где ISR для обработчика клавиатуры есть там ... Вы можете перенести его на C++ или google там должно быть много примеров, особенно TP7.0 (который является паскалем, но легко переносится в TC++)

 Смежные вопросы

  • Нет связанных вопросов^_^