Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Scanf

CuBook05

Функция

Выполняет форматированный ввод из потока stdin.
 
Синтаксис

#include<stdio.h>
int scanf(const char *format [,adress, ...]);
 
Прототип

stdio.h
 
Описание

Функция scanf просматривают входные поля, символ за символом, считывая их из потока stdin. Затем каждое поле форматируется в соответствии со спецификацией формата, передаваемой scanf аргументом format. После этого она записывает отформатированный ввод по адресам, задаваемым аргументами, следующими за форматной строкой. Число спецификаций формата должно соответствовать числу адресов.

Строка формата, присутствующая в каждом вызове функций семейства scanf, управляет тем, каким образом каждая функция будет считывать, преобразовывать и записывать входные поля. Для заданных спецификаций формата должно быть достаточное количество адресных аргументов; если это не соблюдается, результат может быть непредсказуемым и, вероятно ошибочным. Лишние адресные аргументы (больше, чем требует формат) будут игнорированы.

Примечание. Функция scanf часто приводит к непредсказуемым результаттам, когда вы отклоняетесь от точного шаблона. Вам необходимо помнить, что нужно указать scanf, каким образом синхронизировать конец строки. В результате предпочтительнее на наш взгляд комбинация gets или fgets, за которыми следует sscanf.
 
Возвращаемое значение

Функция scanf возвращают количество успешно прочитанных, преобразованных и запомненных входных полей; возвращаемое значение не включает в себя прочитанные поля, которые не были сохранены.

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

Если не было записано ни одного поля, возвращается значение 0.
 
Переносимость

Функция scanf поддерживается на системах UNIX и определена в стандарте ANSI C. Определены у Кернигана и Ритчи. Функция не совместима с Windows.
 
Пример

#include<stdio.h>
#include<conio.h>

int main(void)
{
char label[20];
char name[20];
int entries = 0;
int loop,age;
double salary;
struct Entry_struct
{
char name[20];
int age;
float salary;
} entry[20];
/* ввести заглавие, как строку, длиной до 20 символов */
printf("Введите заглавие для диаграммы: ");
scanf("%20s",label);
fflash(stdin); /* сбросить входной поток, в случае ошибки */
/* ввести число элементов в виде целого */
printf("Сколько элементов (не > 20): ");
scanf("%d",&entries);
fflash(stdin); /* сбросить входной поток, в случае ошибки */
for(loop = 0; loop < entries; ++loop)
{
printf("Элемент %d\n",loop);
/* ввести имя, только буквы в верхнем или нижнем регистре */
printf("Имя: ");
scanf("%[A_Za-z]",entry[loop].name);
fflash(stdin); /* сбросить входной поток, в случае ошибки */
/* ввести возраст, как целое число */
printf("Возраст: ");
scanf("%d",&entry[loop].age);
fflash(stdin); /* сбросить входной поток, в случае ошибки */
/* ввести размер зарплаты как float */
printf("Зарплата: ");
scanf("%f",&entry[loop].salary);
fflash(stdin); /* сбросить входной поток, в случае ошибки */
}
/* ввести имя, возраст и зарплату как строку, целое и число с пла-
вающей точкой, соответственно */
printf("Пожалуйста, введите свое имя, возраст и зарплату.\n");
scanf("%20s %d %lf",name,&age,&salary);
/* напечатать введенные данные */
printf("\n\AТаблица %s\n",label);
printf("Вычислена %s, возраст %d, $%15.2lf\n",name,age,salary);
printf("-----------------------------------------------------\n");
for(loop = 0; loop<entries; ++loop);
printf("%4d | %20s | %5d | %15.2lf\n",
loop+1,
entry[loop].name,
entry[loop].age,
entry[loop].salary);
printf("-----------------------------------------------------\n");
return 0;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Защитный код Обновить