Форум портала Metropolis Галерея   
Добро пожаловать. Пожалуйста, войдите или зарегистрируйтесь.
22 Февраль 2025, 17:12 *

Поиск по Форуму
 
   Начало   Помощь Поиск Правила Войти Регистрация  
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: вопрос по программированию  (Прочитано 4715 раз)
0 Пользователей и 11 Гостей смотрят эту тему.
tech
Завсегдатай
****

Репутация: 6
Сообщений: 405


: 06 Май 2010, 14:13

как выводить ascii код символа нажатой клавиши?
на с и паскале интересует.
K i r i L L
*

Репутация: 166
Сообщений: 713

Мир изменится..

Ответ #1 : 06 Май 2010, 16:18

ну например так:

Код:
#include <conio.h>
#include <stdio.h>

int main(){
 
  int key = getch();  //считываем
  printf("%d",key);     //выводим

  getch();

return 0;
}

tech

キリル =)
tech
Завсегдатай
****

Репутация: 6
Сообщений: 405


Ответ #2 : 06 Май 2010, 17:18

на с понятно. на паскале кто-нибудь подскажет?
imperfect
Житель форума
*****

Репутация: 341
Сообщений: 1167


Проверено электроникой

WWW Email
Ответ #3 : 07 Май 2010, 01:08

ну например так:

Код:
#include <conio.h>
#include <stdio.h>

int main(){
 
  int key = getch();  //считываем
  printf("%d",key);     //выводим

  getch();

return 0;
}

Извиняюсь за занудство, но решение  не очень красивое, ибо не нужно плодить сущности без необходимости Улыбается
Заголовок conio.h нестандартен, поэтому будет работать не во всех компиляторах С.
Вместо функции getch(), ради которой он и подключается, я бы использовал функцию стандартной библиотеки getchar(). Исполняемый файл будет меньше по объему, и программа будет более переносимая. Улыбается

Код:
#include<stdio.h>

int main()
{
printf("%d", getchar());
getchar();
getchar();
return 0;
}

Различие между функциями есть: getchar() выводит осуществляет буферизованное считывание символа, т.е. выводит его на экран и требует нажатия Enter.

Паскаль:

Код:
program trololo;

var
c: char;

begin
    readln(c);
    writeln(ord(c));
    readln
end.

K i r i L L

tech
Завсегдатай
****

Репутация: 6
Сообщений: 405


Ответ #4 : 07 Май 2010, 01:27

ord - это функция? чёто он просто символ выводит
imperfect
Житель форума
*****

Репутация: 341
Сообщений: 1167


Проверено электроникой

WWW Email
Ответ #5 : 07 Май 2010, 02:45

Да, ord - функция, возвращающая ascii-код аргумента.

Усомнился, скачал FreePascal и проверил - все работает.

ExclusivE
Завсегдатай
****

Репутация: 9
Сообщений: 372

Ответ #6 : 07 Май 2010, 04:09

Код:
program trololo;
uses crt;

var
    c: char;

begin
    repeat
        repeat until keypressed; { жрать проц пока не нажата клавиша }
        c:=readkey;
        writeln(ord(c));
    until c<>^[; { пока не нажат esc }
end.
На паскале я не кодил уже лет 8. Скорее всего где-то ошибки.
« Последнее редактирование: 08 Май 2010, 02:37 от ExclusivE »
imperfect
Житель форума
*****

Репутация: 341
Сообщений: 1167


Проверено электроникой

WWW Email
Ответ #7 : 08 Май 2010, 03:41

2ExclusivE: Смотрю, проект развивается. Уже вторая версия вышла.

CRP
Житель форума
*****

Репутация: 72
Сообщений: 1065


Googlusclan

Ответ #8 : 08 Май 2010, 08:19

да это мегапроект метрополиса!!! Давайте все вместе писать, на всех возможных языках программирования под все возможные платформы. И в гугле распиарим )



UNIX for stability, Palm for portability, Mac for productivity, and Windows for solitaire!
ох, чую влепят мне RO.
tech
Завсегдатай
****

Репутация: 6
Сообщений: 405


Ответ #9 : 18 Май 2010, 23:48

оказалось, что нужно использовать прерывания.
эта программа через одно нажатие выводит символ, нужно чтоб вместо символа выводился его ascii код. тоже через раз.

program 1;
uses Crt;
var cha:char;
    bPrint:boolean;
begin
     bPrint:=True;
     while True do
     begin
          while not keypressed do;
       asm
      mov ah,0h
      int 16h
      mov cha,ah
       end;
          if cha=' ' then break;
          if bPrint
      then Begin
           asm
         mov dl,cha
         mov ah,2h
         int 21h
           end;
      end;
          bPrint:= not bPrint;
     end;
end.
imperfect
Житель форума
*****

Репутация: 341
Сообщений: 1167


Проверено электроникой

WWW Email
Ответ #10 : 19 Май 2010, 01:40

Возможно, у нас разные паскали, но в Турбе нужно заменить
mov cha,ah
на
Код:
mov cha,al

Вообще говоря, вывод ascii-кода через прерывание - нетривиальная задача, поскольку он может быть многосимвольным, например, '123'.
Поскольку прерывание 21h осуществляет вывод содержимого младшего байта регистра d (всего 1 символ), нужно реализовать продвинутую логику анализа ascii-кода, и несколько раз подряд делать int 21h.

Кстати, программа не может называться "1", в силу того, что идентификаторы не могут начинаться с цифры.

tech
Завсегдатай
****

Репутация: 6
Сообщений: 405


Ответ #11 : 19 Май 2010, 01:50

Возможно, у нас разные паскали, но в Турбе нужно заменить
mov cha,ah
на
Код:
mov cha,al

действительно, напутал)

а на счёт тривиальности задачи - просто предмет, по которому это надо сделать, называется Интерфейсы Периферийных Устройств
imperfect
Житель форума
*****

Репутация: 341
Сообщений: 1167


Проверено электроникой

WWW Email
Ответ #12 : 19 Май 2010, 01:58

Может, надо через прерывания только считывание, а вывод просто так?

tech
Завсегдатай
****

Репутация: 6
Сообщений: 405


Ответ #13 : 19 Май 2010, 02:03

может и так прокатит) есть идеи?
Страниц: [1] 2  Все   Вверх
  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines
Text only version | PDA version