Форматированный ввод осуществляется функцией scanf, по своей структуре аналогичной функции printf:
scanf(“формат”, аргументы);
Формат содержит спецификации вводимых переменных, имена которых являются аргументами этой функции (списком ввода). Перед именем каждой переменной в списке ввода (кроме имен массивов и строк) ставится знак амперсанда &. Спецификации ввода полностью совпадают с аналогичными спецификациями вывода:
char name[10];
printf(“\nВаше имя: ”);
scanf(“%s”, name);
printf(“\nВаш возраст: ”);
scanf(“%d”, &age);
printf(“\nВаш рост: ”);
scanf(“%d”, &rost);
printf(“\nВаш вес: ”);
scanf(“%f”, &weight);
После запуска программы на экран будет выведено:
Ваше имя:
и программа будет ожидать ввода строки символов. После того, как будет напечатано имя и пользователь нажмет на клавишу ввода, программа заработает дальше:
Ваше имя: Петр
Ваш возраст: 17
Ваш рост: 178
Ваш вес: 67.5
Значения переменных можно вводить одной строкой, разделяя их пробелами, при этом между спецификациями ввода в формате никаких знаков не ставится:
printf(“\nВаше имя, возраст, рост и вес: ”);
scanf(“%s%d%d%f”, name, &age, &rost, &weight);
При выполнении этой программы появляется сообщение, после которого можно вводить черезпробелы значения соответствующих переменных:
Ваше имя, возраст, рост и вес: Петр 17 178 67.5
При этом переменным name, age, rost, weight будут присвоены введенные значения.
В формат ввода, помимо спецификаций, могут входить и другие символы, причем:
· пробелы, символы табуляции \t и перехода на новую строку \n игнорируются,
· другие символы, если они имеются, должны совпадать с очередными непустыми символами, вводимыми с клавиатуры (символами входного потока), то есть они образуют шаблон, с которым должны совпадать вводимые данные:
В этом случае переменные age, rost, weight, nameпримут соответствующие введенные значения.
Если перед спецификатором ввода стоит звездочка *, то поле, относящееся к данному спецификатору в списке ввода, пропускается, и вводимое значение игнорируется. Такая ситуация возникает тогда, когда вводятся значения из файла или с клавиатуры, но одной строкой (при этом они должны разделяться пробелами):
printf(“\nВаше имя, возраст, рост и вес: ”);
scanf(“%s%d%*d%*f”, name, &age, &rost, &weight);
Входной поток имеет вид:
В этом случае переменным будут присвоены следующие значения:
name=”Петр” age=17 rost=0 weight=0.000000
Внимание! Если переменная не инициализирована, то ее значение обнуляется.
Для ввода строк могут быть использованы две дополнительные спецификации:
%[символы] - вводимая строка должна содержать только символы, перечисленные в квадратных скобках без разделительных знаков. При появлении во вводимой строке неуказанного символа ввод строки заканчивается: