sem01 (1114909), страница 3
Текст из файла (страница 3)
Строка формата может содержать обычные литеры, которые будут просто печататься, а может содержать спецификацииформата печати, похожие на рассмотренные нами при разборе функции scanf. Простейшиеиз них перечислены ниже.9%dпечать целого (int) значения со знаком.%uпечать беззнакового целого (unsigned int).%ld печать длинного целого (long) со знаком.%lu печать беззнакового длинного целого (unsigned long).%Ld печать длинного целого (long long) со знаком.%Lu печать беззнакового длинного целого (unsigned long long).%cпечать литеры.%fпечать вещественного числа (double).%Lf печать вещественного числа (long double).В форматной строке могут использоваться специальные последовательности символов:\n — переход на следующую строку, \t — символ табуляции (для равного отступа столбцов).
Это примеры так называемых специальных последовательностей. Хотя в тексте программы они записываются двумя (или более) байтами, в работающей программе им соответствуют один байт — соответствующий управляющий символ в кодировке, с которой работаетсистема. Чтобы напечатать знак процента, он повторяется дважды.Знак взятия адреса & для всех пока рассмотренных нами типов не ставится! Аргументыпечати должны быть точно того типа, который указан в спецификации формата (исключения— см.
ниже). Они должны идти в том же порядке, в котором перечислены в строке формата.В противном случае ваша программа будет в лучшем случае печатать что-то странное, а вхудшем — аварийно завершаться.Для печати значений типа short или signed char нужно использовать спецификаторпечати чисел типа int. Для печати значений типа unsigned short или unsigned charнужно использовать спецификатор печати чисел типа unsigned int. Для печати значенийтипа float используется спецификатор печати значений типа double.1.1.15 Возврат значения из функции20return 0;Поскольку функция main объявлена как возвращающая целое значение, необходим оператор, который определит возвращаемое значение.
Оператор return вызывает завершениеработы функции и возврат значения, указанного в операторе.Относительно самого возвращаемого значения пока заметим, что функция main в обычных случаях должна возвращать значение 0.1.2 Вторая программаРассмотрим следующую задачу: удалить из входного потока все пробельные литеры.123456789#include <stdio.h>int main(){char c;while (scanf("%c", &c) == 1) {if (c != ’ ’) printf("%c", c);}return 0;}101.2.1 Символьные константыЗамечание: слово «символ» — очень сильно перегружено разными смыслами, поэтомуиногда употребляют слово «литера».Литерные константы записываются в апострофах (одинарных кавычках). Например, ’a’— литера a.
Кроме того, для специальных символов применяется следующая запись: ’\’’— литера «апостроф», ’\\’ — литера «обратная косая черта» (backslash), ’\n’ — литераперехода на новую строку, ’\t’ — литера табуляции.Обратите внимание, что литерные константы имеют тип int, а не char.1.2.2 Признак конца файлаВ задачах, которые мы с Вами будем рассматривать, программа, как правило, должна вцикле считывать входные данные, обрабатывать их и выводить результат. Как правило, чтение ведётся не до получения специального значения, а до наступления конца файла. Послетого, как при чтении из файла был достигнут конец файла, данных в нём не осталось, и дальнейшие операции чтения к данному файлу неприменимы и их использовать нельзя.Когда программа считывает данные с клавиатуры (терминала), пользователь должен самуказать, в какой момент ввод данных программы он считает завершённым.
Для этого нажимается специальная комбинация клавиш (Ctrl-Z в Windows, Ctrl-D в UNIX-системах). Этакомбинация клавиш обычно не появляется в файле в виде символа, но приводит к тому, чтоустанавливается флаг конца файла и все функции ввода данных (в нашем случае пока толькоscanf) будут возвращать специальное значние -1 (EOF). Если функция scanf возвращаетзначение EOF, значение всех считывамых в данном вызове scanf переменных не определено. Таким образом, признак конца файла — это специальное значение, возвращаемоефункциями чтения из файла, а не особое значение в самом файле.11.