В данном разделе мы рассмотрим функции, применяемые при вводе и выводе. Кроме того, мы коснемся других аспектов этого понятия. Под printf( ) и scanf( ). Теперь рассмотрим несколько других возможностей, предоставляемых языком Си.
printf( ) и scanf( ). Ниже мы рассмотрим функции getchar( ) и putchar( ).
Эти две функции осуществляют ввод и вывод одного символа при каждом обращении к ним. Этот способ ввода данных лучше соответствует возможностям машины. Более того, такой подход служит основой построения большинства программ обработки текстов, являющихся последовательностями обычных слов. Мы увидим, как можно применять эти функции в программах, занимающихся подсчетом символов, чтением и копированием
Функция getchar( ) получает один символ, поступающий с пульта терминала, и передает его выполняющейся в данный момент программе. Функция putchar( ) получает один символ, поступающий из программы, и пересылает его для вывода на экран. Рассмотрим пример программы, которая принимает один символ с клавиатуры, и выводит его на экран:
/*ввод-вывод*/
#include <stdio.h>
int main( )
{
char ch;
ch=getchar( ); /***1***/
putchar(ch); /***2***/
}
Для большинства систем спецификации функции getchar и putchar содержатся в stdio.h, поэтому мы указали данный getchar( ) аргументов не имеет, т.е. при ее вызове в круглые скобки не помещается никакая величина. Она просто получает очередной поступающий символ, и сама возвращает его значение выполняемой программе. Оператор, приведенный в строке 1, присваивает значение функции getchar( ) переменной ch. Функция putchar( ) имеет один аргумент. При ее вызове необходимо в скобках указать символ, который требуется вывести на печать. Аргументом может быть одиночный символ (включая знаки, представляемые управляющими последовательностями), переменная или функция, значением которой является одиночный символ. Правильным обращением к функции putchar( ) является указание любого из этих аргументов при ее вызове:
putchar('D');
putchar('\n');
putchar('\007');
putchar(ch); /* переменная типа char */
putchar(getchar( ));
Модифицируем нашу программу:
#include <stdio.h>
int main( )
{
putchar(getchar( ));
}
Такая запись очень компактна и не требует введения вспомогательных переменных. В результате компиляции такая программа оказывается более эффективной.
При выполнении данной программы (любой из двух ее версий), вводимый символ в одних вычислительных системах немедленно появится на экране ( getchar( ) вызывается в ней один раз.
Зачем нужны
Рассмотрим вывод на печать групп символов. Желательно, чтобы в любой момент можно было остановить работу программы. Для этого напишем программу так, чтобы она прекращала работу при получении какого-нибудь специального символа, например "!":
/* ввод-вывод */
/* ввод и печать символов до поступления
завершающего символа */
#include <stdio.h>
#define STOP '!' /*дает символу '!' символическое имя */
int main( )
{
char ch;
ch=getchar( ); /***9***/
while(ch != STOP) { /***10***/
putchar( ch); /***11***/
ch=getchar( ); /***12***/
}
}
В данном примере при первом прохождении тела цикла функция putchar( ) получает значение своего аргумента в результате выполнения оператора, расположенного в строке 9. В дальнейшем, вплоть до завершения работы цикла, значением этого аргумента является символ, передаваемый программе функцией getchar, расположенной в строке 12. Цикл while будет осуществлять чтение и печать символов до тех пор, пока не поступит признак STOP.
| ! | Программа, приведенная ниже, делает то же самое, но стиль ее написания лучше отвечает духу языка Си:/* ввод-вывод */
#include <stdio.h>
#define STOP '!'
int main( )
{
char ch;
while ((ch=getchar( )) != STOP) /***8***/
putchar(ch);
}
Одна строка 8 этой программы заменяет строки 9, 10, 12 предыдущей программы. |
/* подсчет символов */
#include <stdio.h>
#define STOP '!'
int main( )
{
char ch;
/*инициализация счетчика символов 0 */
int count = 0;
while ((ch=getchar( )) != STOP) {
putchar(ch);
count++; /* прибавить 1 к счетчику */
}
printf("\n Всего было прочитано %d символа.\n",
count);
}
Если мы хотим просто подсчитать число введенных символов без отображения их на экране, функцию putchar( ) можно опустить.
Заменим признак окончания ввода данных, используем символ новая строка \n. Для этого нужно переопределить признак STOP:
#define STOP '\n'
Символ новая строка пересылается при нажатии клавиши Enter. Предположим, что мы внесли указанное изменение в программу "подсчет символов", а затем при выполнении ввели следующую строку:
На экране тридцать четыре символа.[Enter]
В ответ на экране появятся следующие строки:
Всего было прочитано 34 символа.
Признак, появляющийся в результате нажатия клавиши Enter, не входит в число символов 34, подсчитанных программой, поскольку подсчет осуществляется внутри цикла. Теперь у нас есть программа, которая может прочесть одну строку.
Если нам нужно читать большие порции данных, например из End-of-File ", конец EOF. Выбор конкретного признака EOF зависит от типа системы. Он может состоять даже из нескольких символов. Обычно определение EOF содержится в <stdio.h>. Общеупотребительным является определение
#define EOF (-1)
Пример:
/* ввод-вывод_ф */
#include <stdio.h>
int main( )
{
int ch;
while ((ch = getchar( )) != EOF)
putchar(ch);
}
Это надо помнить:
EOF. Он описан в <stdio.h>.EOF, поскольку директива #define, имеющаяся в <stdio.h>, позволяет нам использовать его символическое представление.ch с char на int. Это мы сделали, потому что значением переменных типа char является целое без знака в диапазоне от 0 до 255, а признак EOF может иметь числовое значение -1. Эта величина недопустима для переменной типа char. Функция getchar( ) фактически возвращает значение типа int, поэтому она в состоянии прочесть символ EOF.ch целого типа никак не может повлиять на работу функции putchar( ). Она просто выводит на печать символьный эквивалент значения аргумента.EOF. В большинстве реализаций операционной системы UNIX, например, ввод [CTRL/d] (нажать на клавишу [d], держа нажатой клавишу [CTRL] ) интерпретируется как признак EOF. Во многих микрокомпьютерах для той же цели используется знак [CTRL/z].Пусть мы ввели фразу с клавиатуры. Приведем результат работы программы "ввод-вывод_ф" в системе, с
Спрос на высокопрофессиональных ИТ-специалистов Спрос на высокопрофессиональных ИТ-специалистов растет как со стороны государственных, так и частных компаний растет как со стороны государственных, так и частных компаний [CTRL/z]
Каждый раз при нажатии клавиши Enter производится обработка символов, попавших в EOF. Программа "ввод-вывод_ф" осуществляет вывод на экран символов независимо от того, откуда они поступают. Наша программа могла бы просматривать содержимое
getchar( ), осуществляющая ввод, причем устройство ввода - клавиатура (в соответствии с нашими предположениями), а выходные данные - отдельные символы. Изменим источник поступления в программу данных. По умолчанию Си-программа рассматривает
Существуют два способа написания программ, работающих с
Переключение вывода. Предположим, мы осуществили компиляцию программы "ввод-вывод_ф" и поместили выполняемый объектный код в get_put. Затем, чтобы запустить данную программу, мы вводим с терминала только имя
get_put
и программа выполняется так, как было описано выше, т.е. получает в качестве входных данных символы, вводимые с клавиатуры. Теперь предположим, что мы хотим посмотреть, как наша программа работает с words.
get_put < words
Символ < служит обозначением операции переключения, используемой в OC UNIX. Выполнение указанной операции приводит к тому, что содержимое words будет направлено в get_put. Сама программа "ввод-вывод_ф" не знает, что входные данные поступают из некоторого EOF. Если мы наберем команду
get_put < words
то в результате на экране может появиться, например, следующий текст:
Анализ данных, прогнозы, организация связи, создание программного обеспечения, построение моделей процессов - вот далеко не полный список областей применения знаний для компьютерных специалистов.
если этот текст находится в words.
Теперь рассмотрим случай, когда нам нужно ввести текст с клавиатуры в my_words. Для этого мы должны ввести команду
get_put > my_words
и начать ввод символов. Символ > служит обозначением операции переключения, используемой в OC UNIX. Ее выполнение приводит к тому, что создается новый my_words, а затем результат работы программы "ввод-вывод_ф", представляющий собой копию вводимых символов, направляется в данный my_words уже существует, он обычно уничтожается, и вместо него создается новый. На экране появляются вводимые слова. Их копии будут направлены в указанный EOF, в OC UNIX это обычно [CTRL/d].
Предположим, что мы хотим создать копию my_words и назвать его my_words2. Нужно ввести для этого команду
get_put < my_words > my_words2
и требуемое задание будет выполнено.
Команда
get_put > my_words2 < my_words
приведет к такому же результату, поскольку порядок указания операций переключения не имеет значения. Нельзя в одной команде использовать один и тот же файл и для ввода, и для вывода.
Чем отличаются другие операционные системы от OC UNIX? Все отличия можно разделить на две группы:
У нас нет возможности рассмотреть все компиляторы с языка Си. Однако в пяти из шести версий компилятора, предназначенных для микрокомпьютеров, для указания операции переключения используются символы < >. Операция переключения отличается от аналогичной операции в двух аспектах:
get_put <words
В данном разделе мы рассмотрим функции, применяемые при вводе и выводе. Кроме того, мы коснемся других аспектов этого понятия. Под printf( ) и scanf( ). Теперь рассмотрим несколько других возможностей, предоставляемых языком Си.
printf( ) и scanf( ). Ниже мы рассмотрим функции getchar( ) и putchar( ).
Эти две функции осуществляют ввод и вывод одного символа при каждом обращении к ним. Этот способ ввода данных лучше соответствует возможностям машины. Более того, такой подход служит основой построения большинства программ обработки текстов, являющихся последовательностями обычных слов. Мы увидим, как можно применять эти функции в программах, занимающихся подсчетом символов, чтением и копированием
Функция getchar( ) получает один символ, поступающий с пульта терминала, и передает его выполняющейся в данный момент программе. Функция putchar( ) получает один символ, поступающий из программы, и пересылает его для вывода на экран. Рассмотрим пример программы, которая принимает один символ с клавиатуры, и выводит его на экран:
/*ввод-вывод*/
#include <stdio.h>
int main( )
{
char ch;
ch=getchar( ); /***1***/
putchar(ch); /***2***/
}
Для большинства систем спецификации функции getchar и putchar содержатся в stdio.h, поэтому мы указали данный getchar( ) аргументов не имеет, т.е. при ее вызове в круглые скобки не помещается никакая величина. Она просто получает очередной поступающий символ, и сама возвращает его значение выполняемой программе. Оператор, приведенный в строке 1, присваивает значение функции getchar( ) переменной ch. Функция putchar( ) имеет один аргумент. При ее вызове необходимо в скобках указать символ, который требуется вывести на печать. Аргументом может быть одиночный символ (включая знаки, представляемые управляющими последовательностями), переменная или функция, значением которой является одиночный символ. Правильным обращением к функции putchar( ) является указание любого из этих аргументов при ее вызове:
putchar('D');
putchar('\n');
putchar('\007');
putchar(ch); /* переменная типа char */
putchar(getchar( ));
Модифицируем нашу программу:
#include <stdio.h>
int main( )
{
putchar(getchar( ));
}
Такая запись очень компактна и не требует введения вспомогательных переменных. В результате компиляции такая программа оказывается более эффективной.
При выполнении данной программы (любой из двух ее версий), вводимый символ в одних вычислительных системах немедленно появится на экране ( getchar( ) вызывается в ней один раз.
Зачем нужны
Рассмотрим вывод на печать групп символов. Желательно, чтобы в любой момент можно было остановить работу программы. Для этого напишем программу так, чтобы она прекращала работу при получении какого-нибудь специального символа, например "!":
/* ввод-вывод */
/* ввод и печать символов до поступления
завершающего символа */
#include <stdio.h>
#define STOP '!' /*дает символу '!' символическое имя */
int main( )
{
char ch;
ch=getchar( ); /***9***/
while(ch != STOP) { /***10***/
putchar( ch); /***11***/
ch=getchar( ); /***12***/
}
}
В данном примере при первом прохождении тела цикла функция putchar( ) получает значение своего аргумента в результате выполнения оператора, расположенного в строке 9. В дальнейшем, вплоть до завершения работы цикла, значением этого аргумента является символ, передаваемый программе функцией getchar, расположенной в строке 12. Цикл while будет осуществлять чтение и печать символов до тех пор, пока не поступит признак STOP.
| ! | Программа, приведенная ниже, делает то же самое, но стиль ее написания лучше отвечает духу языка Си:/* ввод-вывод */
#include <stdio.h>
#define STOP '!'
int main( )
{
char ch;
while ((ch=getchar( )) != STOP) /***8***/
putchar(ch);
}
Одна строка 8 этой программы заменяет строки 9, 10, 12 предыдущей программы. |
/* подсчет символов */
#include <stdio.h>
#define STOP '!'
int main( )
{
char ch;
/*инициализация счетчика символов 0 */
int count = 0;
while ((ch=getchar( )) != STOP) {
putchar(ch);
count++; /* прибавить 1 к счетчику */
}
printf("\n Всего было прочитано %d символа.\n",
count);
}
Если мы хотим просто подсчитать число введенных символов без отображения их на экране, функцию putchar( ) можно опустить.
Заменим признак окончания ввода данных, используем символ новая строка \n. Для этого нужно переопределить признак STOP:
#define STOP '\n'
Символ новая строка пересылается при нажатии клавиши Enter. Предположим, что мы внесли указанное изменение в программу "подсчет символов", а затем при выполнении ввели следующую строку:
На экране тридцать четыре символа.[Enter]
В ответ на экране появятся следующие строки:
Всего было прочитано 34 символа.
Признак, появляющийся в результате нажатия клавиши Enter, не входит в число символов 34, подсчитанных программой, поскольку подсчет осуществляется внутри цикла. Теперь у нас есть программа, которая может прочесть одну строку.
Если нам нужно читать большие порции данных, например из End-of-File ", конец EOF. Выбор конкретного признака EOF зависит от типа системы. Он может состоять даже из нескольких символов. Обычно определение EOF содержится в <stdio.h>. Общеупотребительным является определение
#define EOF (-1)
Пример:
/* ввод-вывод_ф */
#include <stdio.h>
int main( )
{
int ch;
while ((ch = getchar( )) != EOF)
putchar(ch);
}
Это надо помнить:
EOF. Он описан в <stdio.h>.EOF, поскольку директива #define, имеющаяся в <stdio.h>, позволяет нам использовать его символическое представление.ch с char на int. Это мы сделали, потому что значением переменных типа char является целое без знака в диапазоне от 0 до 255, а признак EOF может иметь числовое значение -1. Эта величина недопустима для переменной типа char. Функция getchar( ) фактически возвращает значение типа int, поэтому она в состоянии прочесть символ EOF.ch целого типа никак не может повлиять на работу функции putchar( ). Она просто выводит на печать символьный эквивалент значения аргумента.EOF. В большинстве реализаций операционной системы UNIX, например, ввод [CTRL/d] (нажать на клавишу [d], держа нажатой клавишу [CTRL] ) интерпретируется как признак EOF. Во многих микрокомпьютерах для той же цели используется знак [CTRL/z].Пусть мы ввели фразу с клавиатуры. Приведем результат работы программы "ввод-вывод_ф" в системе, с
Спрос на высокопрофессиональных ИТ-специалистов Спрос на высокопрофессиональных ИТ-специалистов растет как со стороны государственных, так и частных компаний растет как со стороны государственных, так и частных компаний [CTRL/z]
Каждый раз при нажатии клавиши Enter производится обработка символов, попавших в EOF. Программа "ввод-вывод_ф" осуществляет вывод на экран символов независимо от того, откуда они поступают. Наша программа могла бы просматривать содержимое
getchar( ), осуществляющая ввод, причем устройство ввода - клавиатура (в соответствии с нашими предположениями), а выходные данные - отдельные символы. Изменим источник поступления в программу данных. По умолчанию Си-программа рассматривает
Существуют два способа написания программ, работающих с
Переключение вывода. Предположим, мы осуществили компиляцию программы "ввод-вывод_ф" и поместили выполняемый объектный код в get_put. Затем, чтобы запустить данную программу, мы вводим с терминала только имя
get_put
и программа выполняется так, как было описано выше, т.е. получает в качестве входных данных символы, вводимые с клавиатуры. Теперь предположим, что мы хотим посмотреть, как наша программа работает с words.
get_put < words
Символ < служит обозначением операции переключения, используемой в OC UNIX. Выполнение указанной операции приводит к тому, что содержимое words будет направлено в get_put. Сама программа "ввод-вывод_ф" не знает, что входные данные поступают из некоторого EOF. Если мы наберем команду
get_put < words
то в результате на экране может появиться, например, следующий текст:
Анализ данных, прогнозы, организация связи, создание программного обеспечения, построение моделей процессов - вот далеко не полный список областей применения знаний для компьютерных специалистов.
если этот текст находится в words.
Теперь рассмотрим случай, когда нам нужно ввести текст с клавиатуры в my_words. Для этого мы должны ввести команду
get_put > my_words
и начать ввод символов. Символ > служит обозначением операции переключения, используемой в OC UNIX. Ее выполнение приводит к тому, что создается новый my_words, а затем результат работы программы "ввод-вывод_ф", представляющий собой копию вводимых символов, направляется в данный my_words уже существует, он обычно уничтожается, и вместо него создается новый. На экране появляются вводимые слова. Их копии будут направлены в указанный EOF, в OC UNIX это обычно [CTRL/d].
Предположим, что мы хотим создать копию my_words и назвать его my_words2. Нужно ввести для этого команду
get_put < my_words > my_words2
и требуемое задание будет выполнено.
Команда
get_put > my_words2 < my_words
приведет к такому же результату, поскольку порядок указания операций переключения не имеет значения. Нельзя в одной команде использовать один и тот же файл и для ввода, и для вывода.
Чем отличаются другие операционные системы от OC UNIX? Все отличия можно разделить на две группы:
У нас нет возможности рассмотреть все компиляторы с языка Си. Однако в пяти из шести версий компилятора, предназначенных для микрокомпьютеров, для указания операции переключения используются символы < >. Операция переключения отличается от аналогичной операции в двух аспектах:
get_put <words
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.