Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




Форматированный ввод осуществляется функцией scanf, по своей структуре аналогичной функции printf:

scanf(“формат”, аргументы);

Формат содержит спецификации вводимых переменных, имена которых являются аргументами этой функции (списком ввода). Перед именем каждой переменной в списке ввода (кроме имен массивов и строк) ставится знак амперсанда &. Спецификации ввода полностью совпадают с аналогичными спецификациями вывода:

Int age, rost;

Float weight;

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 игнорируются;

· другие символы, если они имеются, должны совпадать с очередными непустыми символами, вводимыми с клавиатуры (символами входного потока), то есть они образуют шаблон, с которым должны совпадать вводимые данные:

scanf(“Возраст=%d, рост=%d, вес=%g, имя:%s”, &age, &rost, &weight, name);

входной поток имеет вид:

Возраст=17, рост=178, вес=67.5, имя:Петр

В этом случае переменные age, rost, weight, name примут соответствующие введенные значения.

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

printf(“\nВаше имя, возраст, рост и вес: ”);

scanf(“%s%d%*d%*f”, name, &age, &rost, &weight);

Входной поток имеет вид:

Петр 17 178 67.5

В этом случае переменным будут присвоены следующие значения:

name=”Петр” age=17 rost=0 weight=0.000000

Внимание! Если переменная не инициализирована, то ее значение обнуляется.

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

%[символы] – вводимая строка должна содержать только символы, перечисленные в квадратных скобках без разделительных знаков. При появлении во вводимой строке неуказанного символа ввод строки заканчивается:

printf(“\nВведите строку:”);

scanf(“%[abceg]”, name);

Если вводимая строка имеет вид

Abcdefg

то переменная name примет значение abc

%[^символы] – вводимая строка ограничивается только символами, указанными в квадратных скобках:

printf(“\nВведите строку:”);

scanf(“%[^aed]”, name);

Если вводимая строка имеет вид

Abcdefg

то переменная name примет значение ae

Любая функция в Си возвращает какое-то значение. Поэтому функция scanf, помимо выполнения форматированного ввода, возвращает количество опознанных и присвоенных элементам списка ввода данных:

printf(“\nВаше имя, возраст, рост и вес: ”);

i=scanf(“%s%d%d%f”, name, &age, &rost, &weight);

Входной поток имеет вид:

Петр 17 178 67.5

При этом переменные name, age, rost, weight получат свои значения, и переменной i будет присвоено значение 4.

Внимание! Использование функции scanf для ввода строк имеет свои особенности.

Если вводимая строка состоит из нескольких слов, разделенных пробелами, то вводится только первое слово (до первого пробела):

char name[20];

printf(“\nВведите ваше имя и фамилию: ”);

scanf(“%s”, name);

Если входной поток имеет вид

Vasja Pupkin

то переменная name примет значение Vasja.

В таком случае для ввода строки лучше использовать функцию gets:

char name[20];

printf(“\nВведите ваше имя и фамилию: ”);

Gets(name);

Если входной поток имеет вид

Vasja Pupkin

то переменная name примет значение Vasja Pupkin.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных