Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
chast3.doc
Скачиваний:
8
Добавлен:
03.11.2018
Размер:
345.09 Кб
Скачать

15.3.7. Функции ввода и вывода

Язык С имеет большой набор различных функций для организации эффективного ввода и вывода разных типов данных. В этом подразделе рассмотрим только две функции – scanf и printf из файла stdio.h, предназначенные для организации форматированного вывода и ввода данных.

Функция scanf имеет следующий синтаксис:

<форматированный ввод> scanf("<шаблон>"[,<список ввода>]);

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

<Шаблон> задает допустимую последовательность символов логической строки окна результатов в режиме ввода с клавиатуры и может содержать символы двух типов:

1) вспомогательные символы, которые должны присутствовать в логической строке окна результатов в режиме ввода с клавиатуры и могут служить разделителями между значениями;

2) символы формата ввода, последовательность которых образует формат ввода.

Синтаксис формата ввода может иметь вид:

<формат ввода> %[<длина>][<модификатор>]<символ преобразования>

<Длина> – число в виде строки цифр, задающее длину поля для ввода. Если длина отсутствует, то длина поля для ввода равна длине значения выражения.

<Символ преобразования>, в частности, может быть следующим:

d или i – значение преобразуется к целому десятичному;

о – значение преобразуется к целому восьмеричному;

х или X – значение преобразуется к целому шестнадцатеричному;

с – значение преобразуется к символу;

s – значение преобразуется к строке символов;

е или E – значение преобразуется к действительному в формате с плавающей точкой;

f – значение преобразуется к действительному;

u – значение преобразуется к целому беззнаковому;

р –значение преобразуется к указателю (адресу).

<Модификатор> используется для уточнения преобразования, а именно:

h – значение преобразуется к типу short (используется вместе с символами преобразования d, i, о, u, х, Х);

l – значение преобразуется к типу long (в случае символов преобразования d, i, о, u, х, X) или double (в случае символов преобразования е, Е, f);

L– значение преобразуется к типу long double (используется вместе с символами преобразований е, Е, f).

Семантика вызова этой стандартной функции в системе программирования Turbo–C++ следующая.

Компьютер переходит в режим ожидания ввода данных с клавиатуры. В этом режиме пользователю предоставляется возможность ввести с клавиатуры значения переменных, идентификаторы которых перечислены в списке ввода. Последовательность вводимых с клавиатуры символов для визуального контроля выводится на дисплей, начиная с текущего положения курсора окна результатов, и может редактироваться в диалоговом режиме обычным образом. В качестве корректных значений допускаются только константы соответствующего типа. Режим ожидания ввода данных с клавиатуры завершается нажатием клавиши “ENTER”, и компьютер переходит в режим интерпретации введенной пользователем с клавиатуры логической строки. Результат интерпретации этой логической строки зависит от соответствия вводимых данных <Символу преобразования> и <Модификатору>, наличия в ней соответствующих <Шаблону> вспомогательных символов, а для символьного и строкового типа еще и от <Длины>. Результат интерпретации не всегда удается предсказать, но известно, что для числового типа пробелы, соответствующие вспомогательные символы являются разделителями. Если <список ввода> содержит идентификаторы нескольких переменных то возможен ввод данных по частям. В случае неправильной интерпретации выполнение программы не завершается досрочно с выдачей сообщения об ошибке.

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

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

Например, при вычислении значения scanf("%c,%f",s, x) для присвоения s=’a’, x=1.23456e-10 логическая строка окна результатов в режиме ожидания ввода данных с клавиатуры может иметь вид:

а,1.23456e-10

Функция printf имеет следующий синтаксис:

<форматированный вывод> printf("<шаблон>"[,<список вывода>]);

<список вывода> представляет собой последовательность разделенных запятыми выражений, значения которых выводятся на экран дисплея в соответствии с форматами <шаблона>.

<Шаблон> содержит символы трех типов: вспомогательные символы, которые текстуально выводятся на экран дисплея, символы формата вывода и управляющие символьные константы. Синтаксис формата вывода может иметь вид:

<формат вывода> %[-][<длина>][.<точность>][<модификатор>]<символ преобразования>

Знак минус влияет на характер выравнивания значения в случае, когда длина поля для вывода больше длины значения выражения. А именно, соответствующее значение прижимается к левой границе поля для вывода (лишние позиции поля для вывода справа от значения заполняются пробелами), при его отсутствии – к правой границе поля (лишние позиции поля для вывода слева от значения заполняются пробелами).

<Длина> – число в виде строки цифр, задающее минимальную длину поля для вывода. Если длина отсутствует, то длина поля для вывода равна длине значения выражения, с учетом <точности>. <Точность> – число в виде строки цифр, которое интерпретируется следующим образом:

  • в случае использования <символа преобразования> в действительное значение <точность> задает число цифр после десятичной точки;

  • в случае использования <символа преобразования> в строковое значение – максимальное число символов строки, начиная с ее начала, которое нужно вывести;

  • в случае использования <символа преобразования> в целое значение – минимальное количество выводимых цифр. Если в значении меньше цифр, то оно выводится с необходимым числом ведущих нулей.

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

<Символ преобразования> и <Модификатор> могут быть такими же, как в <формате вывода>. В случае использования в качестве символа форматирования f значение выводится в формате с фиксированной точкой.

Среди управляющих символьных констант наиболее часто используются следующие:

\а – кратковременная подача звукового сигнала;

\n – переход на новую строку;

\t – горизонтальная табуляция;

\v – вертикальная табуляция;

\b – возврат курсора назад на одну позицию;

\\ – вывод символа \;

\' – - вывод символа ';

\" – вывод символа ";

\? – вывод символа ?.

Число выражений <списка вывода> должно совпадать с числом форматов вывода <шаблона>. Если выражений больше, то последние лишние выражения <списка вывода> игнорируются; если меньше, то последние лишние <форматы вывода> заполняются произвольными значениями.

Например, при вычислении значения printf("i=%ld; \n j=%6d, a=%6.2f.\n", i, j, a); при i=123456, j=456, a=86.531 в окно результатов будут выведены две строки:

I=123456;

J= 456, a= 86.53.

16.1.Организация развилки средствами языка С++

Синтаксис условного оператора в си

If (<выражение>)(опер или выраж); else (|<опер или выраж>|)

В отличие от уже известного нам языка Паскаль, язык Си имеет следующие особенности:

Begin и end в Паскале заменяется {} в си;

Равно = в паскале и равно == в си (но не операция присваивания);

Не равно <> в Паскале и не равно !=в си;

Операции and и or в паскале заменяются && и || соответствующими операциями в Си.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]