- •14.1Тип запись в Turbo Pascal
- •14.2 Тип указатель
- •14.4Файлы
- •14.4.1 Типизированные файлы
- •14.4.2Файлы последовательного доступа
- •14.4.3 Файлы произвольного доступа.
- •14.4.4 Нетипизированные файлы.
- •15. 1. Структура программы и простые типы данных
- •15.2. Основные операции
- •15.3. Математические функции
- •15.3.7. Функции ввода и вывода
- •17.1.Переключатель.
- •18.1 Циклы в си
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 в паскале заменяются && и || соответствующими операциями в Си.