Опубликован: 15.11.2010 | Доступ: свободный | Студентов: 643 / 18 | Оценка: 4.00 / 5.00 | Длительность: 17:30:00
Специальности: Программист
Лекция 6:

Буферизированный (потоковый) ввод-вывод

6.2.6. Ввод средствами языка Turbo Prolog

Для ввода символов с консоли в языке Turbo Prolog существуют следующие функции.

ФУНКЦИЯ readln
СИНТАКСИС: readln(StringVariable), где StringVariable - переменная типа string, "возвращаемая".
НАЗНАЧЕНИЕ: Данная функция считывает с консоли символы и записывает её в переменную StringVariable строкового типа. Строка считывается до первого символа 'EOL' ;
ШАБЛОНЫ: (o);
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Неудача, когда встретится конец файла, когда при вводе нажата клавиша "Esc" ;
ОШИБКИ: Функция не возвращает ошибочных значений;

ФУНКЦИЯ: 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 существуют следующие функции.

ФУНКЦИЯ READ
ОПРЕДЕЛЕНА В: WScript;
СИНТАКСИС: WScript.StdIn.Read(n), где n - число символов, которое необходимо прочесть;
НАЗНАЧЕНИЕ: Чтение n символов из стандартного потока ввода StdIn ;
ОПИСАНИЕ: Функция считывает из потока StdIn заданное параметром n число символов и возвращает полученную строку;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Строка символов, прочтённая с клавиатуры;
ПЕРЕНОСИМОСТЬ: Только сценарии CScript;

ФУНКЦИЯ READALL
ОПРЕДЕЛЕНА В: WScript;
СИНТАКСИС: WScript.StdIn.ReadAll();
НАЗНАЧЕНИЕ: Читает все символы из потока StdIn ;
ОПИСАНИЕ: Функция читает символы из потока StdIn до тех пор, пока не встретится символ конца файла "EOF" (ASCII 26, <Ctrl>+<Z>), и возвращает полученную строку;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Весь текст в одну строку;
ПЕРЕНОСИМОСТЬ: Только сценарии CScript;

ФУНКЦИЯ READLINE
ОПРЕДЕЛЕНА В: WScript;
СИНТАКСИС: WScript.StdIn.ReadLine();
НАЗНАЧЕНИЕ: Чтение строки символов из потока StdIn ;
ОПИСАНИЕ: Функция читает символы из потока StdIn до тех пор, пока не встретится символ конца строки "EOL", и возвращает полученную строку;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Возвращает строку, считанную из потока StdIn ;
ПЕРЕНОСИМОСТЬ: Только сценарии 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. Резюме стандартного буферизированного ввода-вывода

На данной лекции Вы ознакомились с поточным (буферизированным) вводом-выводом, изучили функции потокового ввода на разных языках программирования, и научились писать программы с их использованием. На следующей лекции Вы закрепите материал по потоковому вводу-выводу, а затем узнаете о функциях открытия, закрытия и манипуляциями файлового буфера.

На данной лекции автор специально опускает материал, касающийся организации потокового ввода-вывода на языке Ассемблер, поскольку эти функции в нём реализованы не очевидно, и разбор их работы требует отдельного курса лекций.

В заключение отмечу, что при помощи функций буферизированного ввода-вывода очень легко писать программы - фильтры для работы в командной строке операционной системы. Именно функции потокового ввода-вывода являются "переносимыми между всеми платформами и операционными системами".

Зинаида Березина
Зинаида Березина
Россия, Нижний Новгород, ГГУ им. Н.И.Лобачевского, 1982