Буферизированный (потоковый) ввод-вывод
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. Резюме стандартного буферизированного ввода-вывода
На данной лекции Вы ознакомились с поточным (буферизированным) вводом-выводом, изучили функции потокового ввода на разных языках программирования, и научились писать программы с их использованием. На следующей лекции Вы закрепите материал по потоковому вводу-выводу, а затем узнаете о функциях открытия, закрытия и манипуляциями файлового буфера.
На данной лекции автор специально опускает материал, касающийся организации потокового ввода-вывода на языке Ассемблер, поскольку эти функции в нём реализованы не очевидно, и разбор их работы требует отдельного курса лекций.
В заключение отмечу, что при помощи функций буферизированного ввода-вывода очень легко писать программы - фильтры для работы в командной строке операционной системы. Именно функции потокового ввода-вывода являются "переносимыми между всеми платформами и операционными системами".