Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_otvyty.docx
Скачиваний:
2
Добавлен:
04.08.2019
Размер:
100.42 Кб
Скачать

Синтаксис преобразования вывода

Этот раздел обеспечивает подробности относительно точного синтаксиса спецификаций преобразования, которые могут появляться в printf строке шаблона.

Символы в строке шаблона, которые - не часть спецификации преобразования, печатаются как есть в выходной поток. Последовательности мультисимволов (см. Главу 18 [Расширенные символы]) разрешены в строке шаблона.

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

% флаги ширины [. точность] тип преобразования

Например, в спецификаторе преобразования "%-10.8ld", "-" является флагом, "10" определяет ширину поля, точность - "8", символ "l" является модификатором типа, и "d" определяет стиль преобразования. (Этот специфический спецификатор типа говорит, что печатается long int аргумент в десятичной записи, с минимумом 8 цифр, выровненных по левому краю в поле по крайней мере шириной 10 символов.)

Более подробно, спецификации преобразования вывода состоят из начального символа `%', сопровождаемого последовательностью:

  • Нуль или большее количество символов флага, которые изменяют нормальное поведение спецификации преобразования.

  • Десятичное целое число, определяющее минимальную ширину поля. Если нормальное преобразование производит меньшее количество символов чем этот, поле, дополняется пробелами до заданной ширины. Это ­ минимальное значение; если нормальное преобразование производит большее количество символов чем этот, поле не усечено. Обычно, вывод выравнен по правому краю внутри поля. Вы можете также определять ширину поля "*". Это означает что следующий аргумент в списке параметров (до фактического значения, которое будет напечатано) используется как ширина поля. Значение должно быть int. Если значение является отрицательным, это означает, установить "-" флаг (см. ниже) и использовать абсолютное значение как ширину поля.

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

Вы можете также определять точность "*". Это означает что следующий аргумент в списке параметров (до фактического значения, которое будет напечатано) используется как точность. Значение должно быть int и игнорируется, если оно отрицательное. Если Вы определяете "*" и для ширины и для точности, то аргумент ширны предшествует аргументу точности. Другие С библиотеки могут не распознавать такой синтаксис.

Билет 60: Файловый ввод-вывод. Строковый ввод-вывод в языке Си.

Этот раздел описывает функции для выполнения символьно- и строчноориентированного ввода. Эти функции объявлены в заголовочном файле "stdio.h".

int fgetc (FILE * stream) (функция)

Эта функция читает следующий символ как char без знака из потока stream и возвращает значение, преобразованное в int. Если происходит условие конца файла или ошибка чтения, возвращается EOF.

int getc (FILE * stream) (функция)

Это - аналог fgetc, за исключением того, что для нее допустимо (и типично) выполнение как макрокоманды, которая оценивает аргумент stream больше чем один раз. getc часто сильно оптимизирована, так что это ­ обычно лучшая функция, чтобы читать одиночный символ.

int getchar (void) (функция)

Функция getchar эквивалентна getc с stdin вместо аргумента stream.

Вот пример функции, которая вводит используя fgetc. Она работала бы, точно также используя getc взамен, или используя getchar () вместо fgetc (stdin).

int y_or_n_p (const char *question) { fputs (question, stdout); while (1) { int c, answer; /* Напишем пробел, чтобы отделить ответ от вопроса. */ fputc (" ", stdout); /* Читаем первый символ строки. Это должен быть символ ответа, но может и не быть. */ c = tolower (fgetc (stdin)); answer = c /* Отбрасываем остальную входную строку. */ while (c != '\n') c = fgetc (stdin); /* Примем ответ, если он был допустим. */ if (answer == 'y') return 1; if (answer == 'n') return 0; /* Ответ был недопустим: просим о допустимом ответе. */ fputs ("Please answer y or n:", stdout); } }

int getw (FILE * stream) (функция)

Эта функция читает word (то есть int) из stream. Она предусматривает совместимость с SVID. Мы рекомендуем, чтобы Вы использовали вместо этого fread (см. раздел 7.12 [Блочный ввод-вывод]) .

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