Приостановка вывода потока

Получаемая в процессе решения информация выводится на экран монитора. Вывод информации в консольное окно может осуществляться по-разному:

одиночными строками;

блоками строк;

непрерывным потоком.

В любом из указанных вариантов пользователю желательно иметь средства управления выводимым потоком. Как правило, экран монитора вмещает 25 строк информации. Последняя выводимая строка всегда является текущей. Следовательно, если результаты решения более объемны, происходит автоматическое перемещение (скроллинг) выводимой информации с последовательным удалением с экрана верхних строк. Приостановка вывода позволяет ознакомиться с полученной порцией информации, а затем продолжить вывод. Таким образом, организуется любой блочный (по максимуму постраничный) просмотр информации.

Приостановка вывода может осуществляться пользователем в любой, удобной ему, точке решения. Для этого при программировании задачи следует предусмотреть возможность выполнения программы по желанию пользователя. Проблема решается вводом дополнительных функций getch() или getchar().

ü Внимание! Использование функций getch() и getchar() требует предварительного подключения заголовочного внешнего файла conio.h с помощью специальной директивы #include<conio.h>.

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

Структура оператора использования функций ввода символов имеет вид

[ИП =]getch( ); или [ИП=]getchar( );

где ИП – идентификатор формируемой переменной (целой или символьной);

getch – имя функции для получения символа без вывода на экран;

getchar – имя функции получения символа с эхо-выводом на экран монитора;

( ) – ограничители аргументов функции;

= – символ операции присваивания;

[ ] – признак необязательности содержимого;

; – признак простого оператора.

Фрагмент алгоритма приостановки выполнения программы с использованием ввода символьной переменной имеет вид:

Он реализуется фрагментами программ с разной степенью дружественности пользователю:

char p; . . . printf("Для продолжения " "введите любой символ \n"); p=getch ( ); … } char p; . . . printf("Для продолжения " "введите любой символ \n"); p=getchar ( ); … }

ü Внимание! Ввод символа с использованием функции getch (getchar) выполняется в момент нажатия соответствующей клавиши и не требует <Enter> для его завершения.

Левый фрагмент организует выбор пути «в темную», правый – предписывает вывод (для контроля) введенного символа.

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

Предлагаемые фрагменты можно использовать в программе неоднократно (по мере необходимости), создавая требуемое количество остановок в нужных пользователю точках решения.

Очистка экрана

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

Очистка экрана позволяет удалить ненужную информацию, сделав текущей первую строку. Очищать экран желательно не только от чужой, но и от собственной ненужной информации.

Оператор очистки экрана имеет следующую структуру:

clrscr( );

где clrscr – имя функции (clearscreen – очистить экран);

( ) – ограничители аргументов функции;

; – признак простого оператора.

Функция clrscr() предписывает очистку экрана от всей информации и устанавливает курсор в первую позицию первой строки.

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

Фрагменты алгоритма и программы для первоначальной очистки экрана имеют вид:

 

Алгоритм Программа   . . . #include <conio.h> . . . main( ) { описатели переменных clrscr( ); . . .

 

При необходимости дополнительной очистки внутри расчетной части оператор clrscr( ); устанавливается пользователем в выбранных им точках программы.

ü Внимание! Использование функции очистки экрана clrscr( ) требует предварительного подключения заголовочного внешнего файла conio.h с помощью специальной директивы #include<conio.h>.

Позиционирование курсора

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

gotoxy( поз_x , поз_y );

где gotoxy – имя функции (перейти к x,y );

поз_x – координата столбца;

поз_y – координата строки;

( , ) – ограничители и разделитель аргументов функции;

; – признак простого оператора.

Функция предписывает установку курсора в позицию, задаваемую координатами. В качестве координат используются целые константы, переменные, арифметические выражения. Размеры экрана монитора составляют 80 столбцов на 25 строк. Поэтому диапазон изменения координаты x (столбца) от 1 до 80, а диапазон координаты y (строки) от 1 до 25.

Например, оператор gotoxy( 40 , 12 ); предписывает установку курсора в центр экрана монитора, а фрагмент программы определяет начальную позицию поля (3-й столбец 5-й строки) для ввода численного значения вещественной переменной r.

При желании вводить численные значения индексированной переменной xi в конкретные поля некоторой таблицы, предварительно формируется её шаблон:

Оператор вывода таблицы на экран вставляется в программу до операторов ввода численных значений таблицы.

 

Предположим, он располагает ее контуры в верхнем левом углу экрана со сдвигом вправо на четыре позиции. Тогда до начала использования функции позиционирования необходимо сформировать численные значения сдвига, обозначенные как переменные s и k. В рассматриваемом варианте s=7 (4 пробела до таблицы + 1 ограничитель + 1 пробел + 1-я позиция ввода), k=4 (3 строки шапка + 1 строка ввода).

Применение позиционирования при выводе позволяет задавать, например, сдвиг таблицы вправо. При этом операторы позиционирования используются при формировании шапки, а также в теле цикла перед оператором вывода текущей строки таблицы.

Фрагмент программы для вывода таблицы, начиная с задаваемой координатами (s, k) позиции, может иметь вид:

int s, k;

. . .

scanf(“%d%d”,&s,&k);

. . .

gotoxy( s , k );

printf("+––––––––+–––––––––+");

gotoxy( s , k+1 );

printf("| x(i) | y(i) |");

gotoxy( s , k+2 );

printf("+––––––––+–––––––––+");

. . .

gotoxy( s , k+3+i ); /* в теле цикла до оператора вывода */

printf("| %6.2f | %7.2f |", x[i] , y[i]);

. . .