Функция scanf() может использоваться для чтения строк и потока ввода, для чего надо указать спецификатор формата %s. %s заставляет функцию scanf() читать символы, пока не встретится специальный символ. Прочитанные символы помещаются в массив символов, на который указывает соответствующий аргумент, и результат завершается нулевым пробелом. Применительно к scanf() специальные символы – это пробел, новая строка, табуляция, вертикальная табуляция или перевод формата. В противоположность gets(), которая читает строку, пока не встретиться возврат каретки (нажатие <Enter>), функция scanf() читает строку до первого специального символа. Это означает, что нельзя использовать scanf() для чтения строки типа «this is a test», поскольку первый пробел завершит процесс ввода.
Ввод адреса
Для ввода адреса следует использовать спецификатор формата %р. Данный спецификатор позволяет функции scanf() читать адрес в формате, определяемом архитектурой процессора. Например, следующая программа читает адрес и отображает содержимое по этому адресу:
#include <stdio.h>
int main(void)
{
char *p;
printf(“Enter an adress: ”);
scanf(“%p”, &p);
printf(“Value at location %p is %c\n”, p, *p);
}
Спецификатор %n
Спецификатор %n говорит функции scanf() о необходимости присвоения переменной, на которую указывает соответствующий аргумент, числа прочитанных символов из потока ввода на момент обнаружения %n.