Ввод с клавиатуры
Оператор INPUT список_переменных принимает числовые или текстовые значения с клавиатуры и присваивает их переменным из списка. Программа, дойдя до оператора INPUT, выводит на дисплей знак вопроса и ждет ввода с клавиатуры. Для общения с клавиатурой используется небольшая область памяти (буфер клавиатуры). При нажатии клавиши соответствующий символ (точнее, его код) попадает в буфер клавиатуры, оператор INPUT забирает его оттуда и отображает на экране. Ввод заканчивается при нажатии клавиши Enter.
Имена переменных, предназначенных для хранения текстовых значений, должны заканчиваться знаком $. Имена переменных, хранящих числовые значения, могут в зависимости от типа значения заканчиваться знаком !, # или &. При отсутствии этих знаков в имени переменной считается, что она имеет тип, соответствующий восклицательному знаку. (Подробнее о типах данных рассказано в соответствующем разделе.)
Примеры:
А) В программе |
INPUT x, y |
|
PRINT x, y |
|
|
На дисплее |
? 30, 47 ¿ |
|
30 47 |
В результате переменная “x” получит значение 30, а переменная “y” - значение 47.
Если повторно запустить программу и ввести только одно значение, например, 30 , то Quick Basic предложит повторить ввод - выдаст сообщение “Redo from start”. То же самое сообщение мы получим, если захотим ввести значений больше, чем переменных в списке оператора INPUT.
Б) В программе |
INPUT word$ |
|
PRINT word$ |
|
|
На дисплее |
? Антон ¿ |
|
Антон |
В результате переменная word$ будет содержать слово “Антон”. Обратите внимание, что вводимое слово в кавычки не берется, хотя в операторе присваивания word$ = “Антон” они обязательны!
Запустим программу повторно и наберем на клавиатуре слово “Сергей”. К нашему удивлению, буква “р” не появляется на экране, хотя мы изо всех сил жмем ее на клавиатуре. Увы! Стандартными средствами языка ввести с клавиатуры строчную русскую “р” невозможно. (Мы вернемся к этой проблеме в разделе “Дополнительные возможности”.)
Можно ли ввести число в переменную word$? Давайте в ответ на приглашение введем число 12. Программа “ответит” тем же значением, т.е. переменная word$ содержит сейчас текстовое (но не числовое!) значение “12”. Операции над текстовыми значениями (строками символов) выполняются совсем по другому, чем над числовыми. Выполним, например, программу:
n = 12 + 3 n$ = “12” + “3” PRINT n, n$ |
На дисплей будут выведены два значения: 15 и 123. Но если первое значение - число, полученное в результате арифметической операции сложения, то второе - текстовая константа “123”, которая получена в результата особой операции “склеивания” двух строк.
Из строки символов можно выделить любую ее часть с помощью
функции MID$:
часть = MID$(строка, начальная_позиция,
количество_символов)
Оператор INPUT$(число) вводит заданное число символов без их отображения на экране. Нажимать Enter после ввода не требуется.
Этот оператор удобно использовать при вводе пароля. Пример:
‘Запрос пароля
password$ = INPUT$(4) IF password$ <> “aq” + CHR$(8) + CHR$(27) THEN STOP
‘Основная программа ... |
Чтобы запустить основную программу, нужно нажать две буквенных клавиши - “a” и ”q”. затем клавиши Backspace и Esc, коды которых (8 и 27) преобразуются функцией CHR$ в символы.
С помощью операторов INPUT и INPUT$ нельзя обработать нажатие ряда клавиш: функциональных, клавиш управления курсором, Home, End, PageUp, PageDn и некоторых других. Для этого используется функция INKEY$. Эта функция берет символы из буфера клавиатуры (если он не пуст!), но не ждет нажатия клавиши. Если буфер пуст, INKEY$ возвращает значение “пустая строка” - две кавычки, между которыми ничего нет.
При нажатии клавиши в буфер клавиатуры помещается одно или два числа - код клавиши. Если код клавиши состоит из двух чисел, то первое число обязательно равно 0. Коды некоторых клавиш приведены в таблице.
Клавиша |
BS |
Enter |
Esc |
пробел |
+ |
2 |
G |
g |
я |
Код |
8 |
13 |
27 |
32 |
43 |
50 |
71 |
103 |
239 |
Клавиша |
F1 |
F2 |
Home |
é |
PageUp |
ç |
è |
ê |
Ins |
Код |
0; 59 |
0; 60 |
0; 71 |
0; 72 |
0; 73 |
0; 75 |
0; 77 |
0; 80 |
0; 82 |
Функция INKEY$ возвращает символ, соответствующий коду в буфере клавиатуры. Если она обнаруживает 0 в буфере клавиатуры, то возвращается “склейка” двух символов - CHR$(0) и следующего за ним.
Клавиши Alt, Shift и Ctrl являются клавишами-модификаторами: они изменяют код нажатой одновременно с ними клавиши, но сами не имеют кода. Например, клавиша F2, нажатая с клавишей Shift, генерирует код 0; 85, с клавишей Ctrl - 0; 95, с клавишей Alt - 0; 105.
Задача. Написать программу, которая выводит на экран код нажатой клавиши. Выход из программы - по клавише Esc.
Решение. Для ввода символа воспользуемся уже известной нам функцией INKEY$. а для перевода символа в код - функцией ASC:
код = ASC(символ).
Запишем алгоритм работы программы:
‘------------------Программа ------------------
‘Ждем нажатия клавиши
10 s$ = INKEY$: IF s$ = "" THEN GOTO 10
‘Выделяем и печатаем первый символ
first$ = MID$(s$, 1, 1) PRINT ASC(first$)
‘Анализируем первый символ
IF first$ = CHR$(27) THEN STOP
‘Выделяем и печатаем второй символ
IF first$ = CHR$(0) THEN next$ = MID$(s$, 2, 1) PRINT ASC(next$) END IF GOTO 10 |