C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

С функція scanf


Ввід даних в консоль. функція scanf

Для введення даних в консоль може використовуватися функція scanf() . Ця функція визначена в заголовку stdio.h (там же, де і функція printf ) і має наступне формальне визначення:

scanf(форматна_строка, аргументи)

І форматна_строка , і аргументи для функції scanf обов'язкові.

Форматна_строка містить специфікації перетворення, які визначають дані, що вводяться. Загальний вигляд специфікацій перетворення:

% * ширина_поля модифікатор специфікатор

З цих елементів є обов'язковими тільки два: знак відсотка % і специфікатор .

Специфікатор визначає тип даних, що вводиться:

Формат Пояснення
%c виведення окремих символів (тип char)
%s для виведення рядків (тип string)
%d для виведення цілих чисел зі знаком (тип int)
%i для виведення цілих чисел зі знаком (тип int)
%u для виведення цілих додатніх чисел (тип unsigned)
%f для виведення чисел з плаваючим знаком (float, double)
%F для виведення чисел з плаваючим знаком в верхньому регістрі (float, double)
%e для виведення експоненціального представлення чисел з плаваючим знаком (float, double)
%E для виведення експоненціального представлення чисел з плаваючим знаком в верхньому регістрі (float, double)
%g для виведення чисел використовується більш короткий з форматів %e або %f
%G для виведення чисел використовується більш короткий з форматі в %E або %F
%o для виведення 8 бітних чисел без знака
%x для виведення шістнадцяткових чисел
%X для виведення шістнадцяткових чисел в верхньому регістрі
%% для виведення знака відсотка

Символ зірочки * в специфікації перетворення дозволяє пропустити символи для типу при введенні, зазначеного через специфікатор.

Ширина_поля представляє ціле додатнє число, яке дозволяє визначити, яка кількість байтів буде враховуватися при введенні.

Модифікатори дозволяють конкретизувати тип даних. Зокрема, є такі модифікатори:

h для введення значень типу short int ( %hd )
l для введення значень типу long int ( %ld ) або double ( %lf , %le )
L для введення значень типу long double ( %Lf , %Le )

В якості аргументів у функцію scanf() передаються адреси змінних, яка буде отримувати введені значення. Для отримання адреси змінної перед її ім'ям ставиться знак амперсанда & . Наприклад, якщо змінна називається age , то її адресу ми можемо отримати за допомогою виразу &age .

Наприклад, введемо в консоль числове значення:

#include <stdio.h>
 
int main(void)
{
    int age;
    printf("Input your age:");
    scanf("%d", &age);
     
    printf("age = %d", age);
    return 0;
}

// RESULT:
/*
Input your age: 44
age = 44
*/

Тут вводиться значення для змінної age , яка представляє тип int , тому в форматний рядок у функції scanf передається специфікатор %d . Тут не використовується ні символ зірочки, ні ширина поля, ні модифікатори. Другим параметром йде адреса змінної age - &age .

Після введення значення ми можемо його використовувати, наприклад, вивести на консоль.

Аналогічне буде введення даних інших типів:

#include <stdio.h>
 
int main(void)
{
    int age;
    char name[10];

    // вводимо вік
    printf("Your age: ");
    scanf("%d", &age);

    // вводимо імя
    printf("Your name: ");
    scanf("%10s", &name);
     
    printf("Name: %s \t Age = %d",name,  age);
    return 0;
}

// RESULT:
/*
Your age:  24
Your name: Tom
Name: Tom  Age = 24
*/

Тут для імені виділяється 10 символів. Теоретично ми можемо ввести і більшу кількість символів, але щоб тільки 10 з них враховувалися, в рядок форматування передається ширина поля, яка представляє 10 символів - %s .

Можна відразу вводити кілька значень. У цьому випадку в якості роздільника використовується пропуск (пробіл):

#include <stdio.h>
 
int main(void)
{
    int age;
    char name[10];
    float weight;
    scanf("%d %s %f", &age, &name, &weight);
     
    printf("Name: %s \t Age = %d \t Weight = %f",name,  age, weight);
    return 0;
}

// RESULT:
/*
23 Tom 55.34
Name: Tom Age = 23 Weight = 55,340000
*/

Наш партнер:
beta test mp3 playlist downloader