Буферизированный (потоковый) ввод-вывод
6.2.6. Ввод средствами языка Turbo Prolog
Для ввода символов с консоли в языке Turbo Prolog существуют следующие функции.
ФУНКЦИЯ: | readint |
СИНТАКСИС: | readint(IntgVariable), где IntgVariable - переменная типа integer, "возвращаемая"; |
НАЗНАЧЕНИЕ: | Данная функция считывает с консоли символы и записывает её в целую переменную IntgVariable. Ввод завершается нажатием клавиши "Enter" на клавиатуре. |
ШАБЛОНЫ: | (o); |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Неудача, когда встретится конец файла, когда при вводе нажата клавиша "Esc", когда введено не целое значение; |
ОШИБКИ: | Функция не возвращает ошибочных значений; |
ФУНКЦИЯ: | readreal |
СИНТАКСИС: | readreal(RealVariable), где RealVariable - переменная типа real, "возвращаемая"; |
НАЗНАЧЕНИЕ: | Данная функция считывает с консоли символы и записывает её в переменную RealVariable типа real. Ввод завершается нажатием клавиши "Enter" на клавиатуре. |
ШАБЛОНЫ: | (o); |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Неудача, когда встретится конец файла, когда при вводе нажата клавиша "Esc", когда введено не числовое значение; |
ОШИБКИ: | Функция не возвращает ошибочных значений; |
ФУНКЦИЯ: | readchar |
СИНТАКСИС: | readchar(CharVariable), где CharVariable - переменная типа char, "возвращаемая"; |
НАЗНАЧЕНИЕ: | Данная функция считывает с консоли с эхопечатью одиночный символ и записывает его код в переменную CharVariable типа char. Ввод завершается нажатием клавиши "Enter" на клавиатуре. |
ШАБЛОНЫ: | (o); |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Неудача, когда встретится конец файла; |
ОШИБКИ: | Функция не возвращает ошибочных значений; |
ПРИМЕЧАНИЕ: | Конструкция readchar(_) означает: "пока не нажата клавиша". |
Пример функции на языке Пролог для ввода числа (реализация алгоритма из примера 6.4).
Пример 6.15.
/* Файл ex06015.pro */ /* Пример тестировался в системе программировани Borland Turbo Prolog 2.0 */ domains /* Описываем переменные */ IValue = integer goal /* Выполняем функцию */ write( "\nВведите число: "), readint( IValue ),nl, writef( "\nВведённое число -- %d", IValue ), nl, write( "Press key Enter to Exit..." ), readchar( _ ).
6.2.7. Ввод средствами языка VBScript
Для ввода символов с консоли в языке VBScript существуют следующие функции.
ФУНКЦИЯ | READALL |
ОПРЕДЕЛЕНА В: | WScript; |
СИНТАКСИС: | WScript.StdIn.ReadAll(); |
НАЗНАЧЕНИЕ: | Читает все символы из потока StdIn ; |
ОПИСАНИЕ: | Функция читает символы из потока StdIn до тех пор, пока не встретится символ конца файла "EOF" (ASCII 26, <Ctrl>+<Z>), и возвращает полученную строку; |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Весь текст в одну строку; |
ПЕРЕНОСИМОСТЬ: | Только сценарии CScript; |
ФУНКЦИЯ | SKIP |
ОПРЕДЕЛЕНА В: | WScript; |
СИНТАКСИС: | WScript.StdIn.Skip(n), где n - число пропускаемых символов; |
НАЗНАЧЕНИЕ: | Пропускает при чтении из потока StdIn заданное параметром n число символов; |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Нет; |
ПЕРЕНОСИМОСТЬ: | Только сценарии CScript; |
ФУНКЦИЯ | SKIPLINE |
ОПРЕДЕЛЕНА В: | WScript; |
СИНТАКСИС: | WScript.StdIn.SkipLine(); |
НАЗНАЧЕНИЕ: | Пропускает целую строку при чтении из потока StdIn |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Нет; |
ПЕРЕНОСИМОСТЬ: | Только сценарии CScript; |
Пример функции на языке Visual Basic Script для ввода числа (реализация алгоритма из примера 6.4).
Пример 6.16.
'***************************************************************** ' Имя: ex06016.vbs ' Язык: VBScript операционной системы Microsoft Windows XP ' Описание: Пример функции для чтения и вывода целого числа '***************************************************************** Option Explicit Dim s, junk ' Определение переменных WScript.StdOut.Write( "Введите число (до 4-х символов): ") s = WScript.StdIn.Read(4) WScript.Echo vbCrLf & "Введённое число - " & s & vbCrLf ' Завершение работы с программой (только CScript) WScript.StdErr.WriteLine( "Press key Enter to Exit...") junk = WScript.StdIn.ReadLine() '************* Конец ********************************************
6.2.8. Ввод средствами языка Java
Автор рекомендует для ввода данных с клавиатуры на языке Java использовать класс SavitchIn, описанный в Приложении №4 к данной лекции. Ниже приведён пример на языке Java реализации алгоритма из примера 6.4.
Пример 6.17.
/* File ex06017.java */ /* Пример тестировался на компиляторе Sun J2EE SDK 1.6 (Windows) */ /* Данный пример требует наличие компилированного класса SavitchIn */ import java.io.*; import java.util.*; // Файл ex06017.java public class ex06017 { public static void main( String[] args ) { int iValue; String junk; System.out.print( "Введите целое число: " ); iValue = SavitchIn.readLineInt(); System.out.println( "Введённое число -- " + iValue ); /* Завершение работы программы */ System.out.println( "Press key Enter to exit..." ); junk = SavitchIn.readLine(); } }
6.3. Резюме стандартного буферизированного ввода-вывода
На данной лекции Вы ознакомились с поточным (буферизированным) вводом-выводом, изучили функции потокового ввода на разных языках программирования, и научились писать программы с их использованием. На следующей лекции Вы закрепите материал по потоковому вводу-выводу, а затем узнаете о функциях открытия, закрытия и манипуляциями файлового буфера.
На данной лекции автор специально опускает материал, касающийся организации потокового ввода-вывода на языке Ассемблер, поскольку эти функции в нём реализованы не очевидно, и разбор их работы требует отдельного курса лекций.
В заключение отмечу, что при помощи функций буферизированного ввода-вывода очень легко писать программы - фильтры для работы в командной строке операционной системы. Именно функции потокового ввода-вывода являются "переносимыми между всеми платформами и операционными системами".