Программирование >>  Элементы языков с и с++ 

1 ... 9 10 11 [ 12 ] 13 14 15 ... 200


Программа копирования символьного файла. Вариант 1

Напишем программу, в которой входной файл будет вводиться с клавиатуры (входное стандартное устройство - клавиатура), а выводиться на экран (вы-

денный символ на совпадение его со знаком вопроса и при обнаружении такого совпадения завершать ввод.

Как мы теперь знаем, для того чтобы функция getchar о приступила к вводу каждого набранного на клавиатуре символа, надо после набора группы символов (т. е. строки) нажать клавишу <Enter>. Нажатию этой клавиши соответствует символ \п - символ перехода на новую строку. Если мы хотим ограничиться вводом строки, то признаком конца ввода файла можно считать \п. Если же мы хотим вводить группу строк и после этого дать знать программе, что ввод завершен, то в качестве признака конца файла можно использовать некий управляющий код (из диапазона О-31 таблицы ASCII) или, как мы видели, какой-либо иной символ.

Если воспользоваться стандартным признаком конца файла (нажатием <Ctrl>+<z?>), то следует поступать так: после ввода последнего символа последней строки и нажатия клавиши <Enter> (чтобы функция getchar о начала обработку введенных символов) требуется нажать комбинацию клавиш <Ctrl>+<z>, затем клавишу <Enter> (чтобы символ от <Ctrl>+<z> попал на обработку и тем самым цикл while завершился), затем надо еще раз нажать клавишу <Etiter> (для прохода функции getch ()).

Если обозначить символическую константу, задающую значения признака конца ввода с клавиатуры через eof, то, воспользовавшись оператором #define, В начале профаммы ввода данных с клавиатуры мы можем написать: #define eof -1 признак конца ввода символов с клавиатуры

Здесь - это признак комментария в программе на языке С. Такой знак ставится, если текст комментария занимает только одну строку. Если же комментарий более длинный, то следует воспользоваться другой формой задания комментария- скобками /* */. Весь текст между этими скобками можно располагать на многих строках. Например:

/*признак конца ввода

символов с клавиатуры*/

А теперь приступим к составлению простейших программ работы с символьными данными.



36 гпава 2

ходное стандартное устройство- экран). Текст программы представлен в листинге 2.1.

I Листинг 2.1 ,

б.срр : Defines the entry point for the console application.

#include stdafx.h

#include <conio.h> для getch()

tinclude <stdio.h> для getchar(), putchar()

#define eof -1 признак конца файла <Ctrl>+<Z>

int tmain(int argc, TCHAR* argv[]) (

int c;

printf( Make input>\n ); c=getchar() ; while(c != eof) {

putchar(c); c=getchar();

getch(); /*вводит символ, но без эхо-сопровождения (для организации задержки экрана)*/

Переменная с, в которую вводится один символ, описана как int, а не как char. Почему? Дело в том, что в языке С типы char и int взаимозаменяемы (переменная с фактически содержит код символа, т. е. некоторое число).

С другой стороны, чтобы определить момент наступления конца ввода с клавиатуры, мы должны сравнить содержимое переменной с с числом eof. Именно поэтому переменная с объявлена как int.

Функция printf о выводит на экран запрос на ввод. Далее вводится первое значение переменной с (как мы договаривались ранее, набираем на клавиатуре строку и нажимаем клавишу <Enter>, тогда getchar {) начинает обра-



ботку по одному символу). Потом с помощью оператора цикла while () начинается циклическая обработка ввода/вывода символов.

Пока условие в заголовочной части while () истинно (т. е. пока мы не нажали комбинацию клавиш <Ctrl>+<z>), выполняется тело оператора while о - все операторы, находящиеся внутри фигурных скобок: putchar(c) выводит введенный символ на экран, c=getchar{) вводит новый символ в качестве значения переменной с. После этого программа доходит до конца тела оператора while о - закрывающей фигурной скобки - и снова возвращается в его заголовочную часть, где начинает проверять выполнение записанного там условия. Если условие истинно, т. е. введенный в качестве значения переменной с символ не соответствует <Ctrl>+<z>, то снова выполняются операторы, находящиеся в теле while ().

Как только мы нажмем комбинацию клавиш <Ctrl>+<z?>, в переменной с появится ее код (число -1). Поскольку условие выполнения оператора while () нарушится (значение переменной с станет равно eof), то управление будет передано следующему после while о оператору. Это будет функция getchO, которая потребует ввода символа с клавиатуры. Пока мы не нажмем какую-либо клавишу, getch () будет ждать ввода, а мы в это время будем рассматривать картинку на экране и гадать, что же у нас получилось. Если мы нажмем на любую клавишу, то наша программа завершится.

Следует кое-что уточнить: независимо от того, вывели мы символ на экран или нет, он будет отображен на экране функцией getchar О . В таком случае говорят, что getchar о работает с эхо-сопровождением. Поэтому когда сработает функция putchar{c), то может показаться, что она повторно выведет введенный символ. На самом деле это не так: двойник символа на экране строкой выше появится из-за излишней плодовитости getchar о. Функция же getch () работает без эхо-сопровождения.

Для закрепления материала желательно выполнить программу в режиме отладки, чтобы детально посмотреть, как все происходит на самом деле. Для этого щелкните мышью в поле подшивки слева от оператора while (с ! = eof). В этом поле появится пометка в виде красного шарика. Это так называемая точка прерывания программы (в опции Debug главного меню среды вы ее обнаружите под названием breakpoint). Запуск программы на выполнение надо выполнить в режиме отладки: либо по нажатию клавиши <F5>, либо командами DebugjStart Debugging.

Введите, например, символы: 1, 2, 3. Их коды по таблице ASCII: 49, 50, 51. После нажатия клавиши <Enter> программа остановится в точке прерывания (в красном кружочке появится желтая стрелка вправо - это сигнал о том, что произошел останов программы).



1 ... 9 10 11 [ 12 ] 13 14 15 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика