русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Форматный ввод-вывод.


Дата добавления: 2013-12-23; просмотров: 4542; Нарушение авторских прав


Ввод-вывод строк.

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

 

char* gets(char * s); /* Функция ввода */

int puts(char * s); /* Функция вывода */

 

Обе функции имеют только один аргумент - указатель s на массив символов. Если строка прочитана удачно, функция gets( ) возвращает адрес того массива s, в который производился ввод строки. Если произошла ошибка, то возвращается NULL.

Функция puts( )в случае успешного завершения возвращает последний выведенный символ, который всегда является символом '\n'. Если произошла ошибка, то возвращается EOF.

Приведем простейший пример использования этих функций.

 

Напомним, что любая строка символов в языке Си должна заканчиваться нуль-символом '\0'. В последний элемент массива strl нуль-символ будет записан автоматически во время трансляции при инициализации массива. Для функции puts( )наличие нуль-символа в конце строки является обязательным. В противном случае, т.е. при отсутствии в символьном массиве символа '\0', программа может завершиться аварийно, так как функция puts( ) в поисках нуль-символа будет перебирать всю доступную память байт за байтом, начиная в нашем примере с адреса strl. Об этом необходимо помнить, если в программе происходит формирование строки для вывода ее на экран дисплея. Функция gets( ) завершает свою работу при вводе символа '\n', который автоматически передается от клавиатуры в ЭВМ при нажатии на клавишу <Enter>. При этом сам символ '\n' во вводимую строку не записывается. Вместо него в строку помещается нуль-символ '\0'. Таким образом, функция gets( ) производит ввод "правильной" строки, а не просто последовательности символов.



Здесь следует обратить внимание на следующую особенность ввода данных с клавиатуры. Функция gets( ) начинает обработку информации от клавиатуры только после нажатия клавиши <Enter>. Таким образом, она "ожидает", пока не будет набрана нужная информация и нажата клавиша <Enter>. Только после этого начинается ввод данных в программу.

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

Для работы со стандартными потоками в режиме форматного

ввода-вывода определены две функции.

 

printf( ) - форматный вывод;

scanf( ) - форматный ввод.

Форматный вывод в стандартный выходной поток. Прототип функции printf( ) имеет вид:

int printf(const char*format, . . .);

 

При обращении к функции printf( ) возможны две формы задания первого параметра:

 

int printf(форматная строка, список_аргументов};

int printf(указатель на_форматную_строку, список аргументов);

 

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

Возвращаемое значение функции printf( ) - число напечатанных символов; а в случае ошибки - отрицательное число.

Форматная_строка ограничена двойными кавычками и может включать произвольный текст, управляющие символы и спецификации преобразования данных. Текст и управляющие символы из форматной строки просто копируются в выходной поток. Форматная строка обычно размещается в списке фактических параметров функции, что соответствует первому варианту вызова функции printf( ). Второй вариант предполагает, что первый фактический параметр - это указатель типа char *, a сама форматная строка определена в программе как обычная строковая константа или переменная.

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

Если аргументов недостаточно для данной форматной строки, то результат зависит от реализации (от операционной системы и от системы программирования). Если аргументов больше, чем указано в форматной строке, "лишние" аргументы игнорируются. Гарантируется, что при любом количестве параметров и любом их типе после выполнения функции printf( ) дальнейшее выполнение программы будет корректным.

Спецификатор Тип аргумента   Формат вывода  
d int, char, Десятичное целое со знаком
  unsigned  
i int, char, Десятичное целое со знаком
  unsigned  
u int, char, Десятичное целое без знака
  unsigned  
int, char, Восьмеричное целое без знака
  unsigned  
x int, char, Шестнадцатеричное целое без знака; при выводе ис-
  unsigned пользуются символы "0...9a...f
X int, char, Шестнадцатеричное целое без знака; при выводе ис-
  unsigned пользуются символы "0...9A...F
f double, Вещественное значение со знаком в виде:
  float знак _числаdudd.dddd,
    где dddd - одна или более десятичных цифр. Количество цифр перед десятичной точкой зависит от величины выводимого числа, а количество цифр после десятичной точки зависит от требуемой точности. Знак числа при отсутствии модификатора '+' изображается только для отрицательного числа
   
   
   
   
е double, float Вещественное значение в виде: знак числаm.ddddeзнакxxx, где m.dddd - изображение мантиссы числа; m - одна десятичная цифра; dddd - последовательность десятичных цифр; е - признак порядка; знак - знак порядка; ххх - десятичные цифры для представления порядка числа; знак числа при отсутствии модификатора '+' изображается только для отрицательного числа
Е double, float Идентичен спецификатору "е", за исключением того, что признаком порядка служит "Е"
g double, float Вещественное значение со знаком печатается в формате спецификаторов "f'' или "е" в зависимости от того, какой из них более компактен для данного значения и точности. Формат спецификатора "е" используется тогда, когда значение показателя меньше -4 или больше заданной точности. Конечные нули отбрасываются, а десятичная точка появляется, если за ней следует хотя бы одна цифра
G double, float Идентичен формату спецификатора "g", за исключением того, что признаком порядка служит "Е"
с int, char, unsigned Одиночный символ
S char * Символьная строка. Символы печатаются либо до первого нулевого символа ('\0') или печатается то количество символов, которое задано в поле точность спецификации преобразования
р void * Значение адреса. Печатает адрес, указанный аргументом (представление адреса зависит от реализации)
       

Список_аргументов (с предшествующей запятой) может отсутствовать.

Спецификация преобразования имеет следующую форму:

% флаги ширина_поля.точностъ модификатор спецификатор

Символ % является признаком спецификации преобразования. В спецификации преобразования обязательными являются только два элемента: признак % и спецификатор.

Спецификация преобразования не должна содержать внутри себя пробелов. Каждый элемент спецификации является одиночным символом или числом.

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

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

 

Таблица 7.1

 



<== предыдущая лекция | следующая лекция ==>
Ввод-вывод отдельных символов. | Спецификаторы форматной строки для функции форматного вывода


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.