Руководство программиста для Linux

    778b1c86   

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


Точно так же, как printf(...) для форматированного вывода, вы можете использовать scanf(...) для форматированного ввода. * int fscanf(FILE *stream, const char *format, ...)

fscanf(...) читает из stream и преобразует ввод по правилам, определяемым в format. Результаты помещаются в аргументы, заданные в "..." (эти аргументы должны быть указателями!). Чтение заканчивается, когда в format исчерпаны правила форматирования.

Таблица 8.1: Libc - трансформации printf

Символ | Форматируется в --------|----------------------------------- d,i | int signed, десятиричный o | int unsigned, восьмеричный, без предваряющего 0 x,X | int unsigned, шестнадцатиричный, без предваряющего 0x u | int unsigned, десятиричный c | int (unsigned) одиночный символ s | char * до \0 f | double как [-]mmm.ddd e,E | double как [-]m.dddddde+xx, [-]m.dddddde-xx g,G | double использует %e или %f когда нужно p | void * n | int * % | %

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

format может содержать правила форматирования аргументов (см. табл. 8.2)

Он может также включать:

  • пропуски или табуляции, которые игнорируются;
  • любой нормальный символ, кроме %. Символы должны быть во вводе на соответствующих позициях.
  • правила преобразования, заданные с %, необязательный символ * (позволит fscanf(...) присвоить аргументу), необязательное число, необязательный символ h, l или L (для задания длины считываемой инфомации) и символ трансформации.
  • * int scanf(const char *format, ...)

    То же, что fscanf(stdin,...)

    * int sscanf(char *str, const char *format, ...)

    То же, что scanf, но ввод производится из строки str.



    Содержание раздела