Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4139

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Часть III. Стандартная библиотека языка программирования C 

356 

нием текущего аргумента функции 

fprintf

. Если это число отри-

цательное, то знак минус рассматривается как флаг, который вы-
равнивает вывод влево, а величина числа определяет ширину по-
ля вывода. 
Для вывода одного символа используется следующий формат: 

  %[-][0][ширина][h|l]c 

где: 

 

h

 

обозначает однобайтовый символ; 

 

l

 обозначает широкий (wide) символ; 

 

c

 обозначает данные типа 

char

Для вывода строки используется следующий формат: 

  %[-][0][ширина][.точность][h|l]s 

где: 

 

точность

  задает  максимальное  количество  выводимых  сим- 

волов; 

 

h

 

обозначает строку однобайтовых символов; 

 

l

 обозначает строку широких (wide) символов; 

 

s

 обозначает, что выводится строка. 

Для  вывода  целого  числа  со  знаком  используется  следующий 
формат: 

  %[-][+|пробел][0][ширина][.точность][h|l]{d|i} 

где: 

 

+

 выводит знак 

+

 для положительных чисел, заметим, что для 

отрицательных чисел всегда выводится знак 

-

 

пробел

  выводит  пробел  в  позицию  знака,  если  число  положи-

тельное; 

 

точность

  задает  минимальное  количество  цифр,  которые 

должны  быть  выведены,  если  цифр  меньше,  то  пустые  места 
заполняются  пробелами  или  нулями  в  зависимости  от  уста-
новленного флага; 

 

h

 

обозначает модификатор типа 

short


background image

Глава 30. Функции для работы с файлами <stdio.h> 

357 

 

l

 обозначает модификатор типа 

long

 

d

 обозначает число типа 

int

 

i

 обозначает число типа 

int

.

 

Для  вывода  целого  числа  без  знака  используется  следующий 
формат: 

  %[-][#][0][ширина][.точность][h|l]{u|o|x|X} 

где: 

 

#

  выводит  начальный 

0

  для  чисел  в  восьмеричной  системе 

счисления или начальные 

0x

 или 

0X

 для чисел в шестнадцате-

ричной системе счисления; 

 

точность

  задает  минимальное  количество  цифр,  которые 

должны  быть  выведены,  если  цифр  меньше,  то  пустые  места 
заполняются  пробелами  или  нулями  в  зависимости  от  уста-
новленного флага; 

 

h

 обозначает модификатор типа 

short

 

l

 обозначает модификатор типа данных 

long

 

u

  обозначает  число  типа 

unsigned

,  которое  выводится  в  деся-

тичной системе счисления; 

 

o

  обозначает  число  типа 

unsigned

,  которое  выводится  в  вось-

меричной системе; 

 

x

  обозначает  число  типа 

unsigned

,  которое  выводится  шест- 

надцатеричной системе; 

 

X

  обозначает  данные  типа 

unsigned

,  которое  выводится  в  

шестнадцатеричной системе. 

Для вывода числа с плавающей точкой используется следующий 
формат: 

  %[-][#][+|пробел][0][ширина][.точность][L]{f|e|E|g|G} 

где: 

 

#

  в  любом  случае  выводит  десятичную  точку  для  типов 

f

e

 

или 

E

, а для типов 

g

  и 

G

, кроме того, предотвращает подавле-

ние завершающих нулей; 


background image

Часть III. Стандартная библиотека языка программирования C 

358 

 

+

 выводит знак 

+

 для положительных чисел, заметим, что для 

отрицательных чисел всегда выводится знак 

-

 

пробел

 выводит пробел в позицию знака; 

 

точность

  задает количество  цифр  после  десятичной  точки  для 

форматов 

f

e

  и 

E

  или  количество  значащих  цифр  для  форма-

тов 

g

  и 

G

.  Числа  округляются  отбрасыванием.  По  умолчанию 

принимается точность в шесть десятичных цифр; 

 

L

 обозначает модификатор типа данных 

long

 

f

 обозначает число с плавающей точкой типа 

double

 

e

  обозначает  число  с  плавающей  точкой  типа 

double

, которое 

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

'e'

 

E

  обозначает  число  с  плавающей  точкой  типа 

double

, которое 

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

E

 

g

  обозначает  число  с  плавающей  точкой  типа 

double

, для вы-

вода которого используется наиболее короткий из форматов 

f

 

или 

e

 

G

  обозначает  число  с  плавающей  точкой  типа 

double

, для вы-

вода которого используется наиболее короткий из форматов 

f

 

или 

E

Для вывода указателя используется следующий формат: 

  %[-][+|пробел][ширина]p 

где: 

 

+

 или 

пробел

 выравнивает поле вывода вправо; 

 

p

 обозначает данные типа 

void*

Для  определения  количества  символов,  которые  были  успешно 
записаны в поток вывода, используется следующий формат: 

  %[l]n 

где: 

 

l

 обозначает модификатор типа 

long

 

n

 указывает, что аргумент должен быть указателем на тип 

int


background image

Глава 30. Функции для работы с файлами <stdio.h> 

359 

В этом случае аргумент функции 

fprintf

 должен быть указателем 

на целую переменную. В эту переменную функция 

fprintf

 запи-

шет количество успешно выведенных символов. 
В  листинге  30.7  приведены  примеры  использования  функции 

fprintf

Листинг 30.7. Форматированный вывод 

#include <stdio.h> 
int main() 

  FILE *out; 
  int n = 0; 
  int *p = &n; 

  out = fopen("text.txt", "w"); 

  fprintf(out, "c: %c\n", 'a');     /* a */ 
  fprintf(out, "lc: %lc\n", L'a');  /* a */ 

  fprintf(out, "s: %s\n", "string");     /* string */ 
  fprintf(out, "ls: %ls\n", L"string");  /* string */ 

  fprintf(out, "d: %d\n", -123);    /* -123 */ 
  fprintf(out, "d: %05d\n", -123);  /* -0123 */ 

  fprintf(out, "f: %f\n", 12.34);  /* 12.340000 */ 
  fprintf(out, "e: %e\n", 12.34);  /* 1.234000 */ 
  fprintf(out, "E: %E\n", 12.34);  /* 1.234000 */ 
  fprintf(out, "g: %g\n", 12.34);  /* 12.34 */ 
  fprintf(out, "G: %G\n", 12.34);  /* 12.34 */ 

  fprintf(out, "p: %p\n", p); 
  fprintf(out, "%c%n\n", 'a', p);  /* a */ 
  fprintf(out, "n = %d\n", n);     /* n = 1 */ 

  fclose(out); 

  return 0; 


background image

Часть III. Стандартная библиотека языка программирования C 

360 

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

Для  форматированного  ввода  данных  используется  функция 

fscanf

, которая имеет следующий прототип: 

  int fscanf(FILE* stream, const char* format, ...); 

Эта  функция  выполняет  чтение  данных  из  файла 

stream

  в  соот-

ветствии  с  форматной  строкой 

format

.  Параметр 

format

  должен 

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

EOF

.  В  случае 

достижения конца файла функция устанавливает индикатор кон-
ца файла. Если при достижении конца файла не было выполнено 
ни одного преобразования формата, то функция возвращает зна-
чение 

EOF

Пробел, символы 

\t

 или 

\n

 в форматной строке описывают один 

или  более  пробельных  символов  во  входном  потоке,  к  которым 
относятся символы: пробел, 

\t

\n

\v

  и 

\f

. Функция 

fscanf

  про-

пускает пустые символы во входном потоке. 
Литеральные символы в форматной строке, за исключением сим-
вола 

%

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

же  символы.  Если  такого  символа  нет,  то  функция 

fscanf

  пре-

кращает ввод. Функция 

fscanf

 пропускает литеральные символы. 

В общем случае спецификация формата ввода имеет вид: 

  %[*][ширина][модификатор]тип 

где: 

 

*

  обозначает  пропуск  при  вводе  поля,  определенного  данной 

спецификацией; 


Смотрите также файлы