Загальна характеристика с. Функція Scanf C: опис

У даній статті функція scanf() розглядається в загальному виглядібез прив'язки до конкретного стандарту, тому сюди включені дані будь-яких стандартів C99, C11, C++11, C++14. Можливо, у деяких стандартах функція працює з відмінністю від викладеного у статті матеріалу.

Функція scanf C - опис

scanf() - це функція, розташована в заголовному файлі stdio.h(C) і cstdio(C++), вона також називається форматованим введенням даних у програму. scanf читає символи зі стандартного потоку введення (stdin) та перетворює їх відповідно до формату, після чого записує у зазначені змінні. Формат - означає, що дані на час вступу наводяться до певного виду. Таким чином, функція scanf C описується:

scanf("%формат", &змінна1[, &змінна2,[…]]),

де змінні передаються як адреси. Причина такого способу передачі змінних у функцію очевидна: у результаті вона повертає значення, що вказує на наявність помилок, тому єдиним способом змінювати значення змінних є передача за адресою. Також завдяки такому способу функція може обробляти дані будь-яких типів.

Деякі програмісти через аналогію з іншими мовами називають функції, подібні до scanf() або printf(), процедурами.

Scanf дозволяє здійснювати введення всіх базових типів мови: char, int, float, string тощо. У випадку зі змінними типу string немає потреби вказувати знак адреси - «&», оскільки змінна типу string є масивом, і її ім'я є адресою першого елемента масиву в пам'яті комп'ютера.

Формат введення даних або керуючий рядок

Почнемо з розгляду прикладу використання функції scanf C з опису.

#include int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; //вимога linux-систем )

Формат введення складається з чотирьох параметрів: %[*][ширина][модифікатори] тип. При цьому знак "%" та тип є обов'язковими параметрами. Тобто мінімальний вигляд формату виглядає таким чином: %s, %d і так далі.

У загальному випадку символи, що становлять рядок формату, поділяються на:

  • специфікатори формату – все, що начитається з символу %;
  • розділові або пробільні символи - ними вважаються пробіл, табуляція (t), новий рядок (n);
  • символи, відмінні від пробельних.

Функція може бути небезпечною.

Використовуйте замість scanf() функцію scanf_s().

(повідомлення від Visual Studio)

Тип, або специфікатори формату, або літери перетворення, або контрольні символи

Опис scanf C має містити, як мінімум, специфікатор формату, який вказується наприкінці виразів, що починаються зі знака «%». Він повідомляє програмі тип даних, який слід очікувати під час введення, зазвичай з клавіатури. Список усіх специфікаторів формату у таблиці нижче.

Значення

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

Програма очікує на введення десяткового числа цілого типу. Змінна повинна мати тип int.

Програма очікує введення числа з плаваючою точкою (комою) в експоненційній формі. Змінна повинна мати тип float.

Програма очікує введення числа з плаваючою точкою (комою). Змінна повинна мати тип float.

7

Програма очікує введення числа з плаваючою точкою (комою). Змінна повинна мати тип float.

Програма очікує на введення вісімкового числа. Змінна повинна мати тип int.

Програма очікує на введення рядка. Рядком вважається набір будь-яких символів до першого зустрінутого роздільного символу. Змінна повинна мати тип string.

Програма очікує на введення шістнадцяткового числа. Змінна повинна мати тип int.

Змінна очікує введення вказівника. Змінна повинна мати тип покажчика.

Записує в змінну ціле значення, що дорівнює кількості лічених до поточного моменту символів функцією scanf.

Програма зчитує ціле число. Тип змінної повинен бути unsigned integer.

Програма очікує на введення двійкового числа. Змінна повинна мати тип int.

Набір символів сканування. Програма очікує введення символів з обмеженого пулу, вказаного між scanf буде працювати до тих пір, поки на потоці введення знаходяться символи із зазначеної множини.

Символи у рядку формату

Символ зірочка (*)

Зірочка (*) - це прапор, який показує, що операцію присвоєння треба придушити. Зірочка ставиться одразу після знака «%». Наприклад,

Scanf("%d%*c%d", &x, &y); //ігнорувати символ між двома цілими числами. scanf("%s%*d%s", str, str2); //ігнорувати ціле число між двома рядками.

Тобто якщо ввести в консолі рядок «45-20» програма зробить таке:

  1. Змінної "x" буде присвоєно значення 45.
  2. Змінній «y» буде надано значення 20.
  3. А знак мінус(тире) «-» буде проігнорований завдяки %*c.

Ширина (або ширина поля)

Це ціле число між знаком «%» та специфікатором формату, яке визначає максимальна кількістьсимволів для зчитування за операцію читання.

Слід пам'ятати кілька важливих моментів:

  1. scanf припинить свою роботу, якщо зустріне розділовий символ, навіть якщо не рахував 20 символів.
  2. Якщо на введення подається більше 20 символів, у змінну str будуть записані лише перші 20 символів.

Модифікатори типу (або точність)

Це спеціальні прапори, які модифікують тип даних, що очікуються на введення. Прапор вказується зліва від специфікатора типу:

  • L або l (маленька L) При використанні "l" зі специфікаторами d, i, o, u, x прапор повідомляє програму, що очікується введення даних типу long int. При використанні "l" зі специфікатором e або f прапор повідомляє програмі, що вона повинна очікувати введення значення типу double. Використання «L» повідомляє програму, що очікується значення типу long double. Використання "l" зі специфікаторами "c" та "s" повідомляє програмі, що очікуються двобайтові символи типу wchar_t. Наприклад, %lc, %ls, %l.
  • h – прапор, що вказує на тип short.
  • hh - означає, що змінна є вказівником на значення типу signed char або unsigned char. Прапор можна використовувати із специфікаторами d, i, o, u, x, n.
  • ll (дві маленькі L) - означає, що змінна є вказівником на значення типу signed int або unsigned long long int. Прапор використовується із специфікаторами: d, i, o, u, x, n.
  • j - означає, що змінна є вказівником на тип intmax_t або uintmax_t із заголовного файлу stdint.h. Використовується із специфікаторами: d, i, o, u, x, n.
  • z - означає, що змінна є вказівником на тип size_t, визначення якого знаходиться у stddef.h. Використовується із специфікаторами: d, i, o, u, x, n.
  • t - означає, що змінна є вказівником на тип ptrdiff_t. Визначення цього типу знаходиться в stddef.h. Використовується із специфікаторами: d, i, o, u, x, n.

Більш очевидно картину з модифікаторами можна як таблиці. Такий опис scanf C для програмістів буде зрозумілішим.

Інші символи

Будь-які символи, які будуть зустрінуті у форматі, відкидатимуться. При цьому варто зазначити, що наявність у рядку пробілів або розділових символів (новий рядок, пробіл, табуляція) може призводити до різної поведінки функції. В одній версії scanf() читатиме без збереження будь-яку кількість роздільників до моменту, поки не зустріне символ, відмінний від роздільника, а в іншій версії - пробіли (тільки вони) не відіграють ролі та вираз "%d + %d" еквівалентно "% d+%d".

Приклади

Розглянемо ряд прикладів, що дозволяють поміркувати і точніше зрозуміти роботу функції.

Scanf("%3s", str); //якщо ввести в консолі рядок «1d2s3d1;3», у str запишеться тільки «1d2» scanf("%dminus%d", &x, &y); //символи «minus» між двома числами будуть відкинуті scanf("%5", str); //введення символів у str відбуватиметься доти, доки їх не буде 5 і символи є числами від 0 до 9. scanf("%lf", &d); // очікується введення даних типу double scanf ("% hd", & x); // очікується кількість типу short scanf("%hu", &y); // очікується число типу unsigned short scanf("lx", &z); // очікується число типу long int

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

scanf C - опис для початківців

Цей розділ корисний новачкам. Найчастіше треба мати під рукою не стільки повний опис scanf C, скільки деталі роботи функції.

  • Функція є частково застарілою. Існує кілька різних реалізацій у бібліотеках різних версій. Наприклад, удосконалена функція scanf S C, опис якої можна знайти на веб-сайті microsoft.
  • Кількість специфікаторів у форматі має відповідати кількості переданих функцій аргументів.
  • Елементи вхідного потоку повинні відокремлюватися лише розділовими символами: пробіл, табуляція, новий рядок. Кома, точка з комою, точка і т. д. - ці символи не є роздільними для функції scanf().
  • Якщо scanf зустріне розділовий символ, введення буде зупинено. Якщо змінних для читання більше однієї, то scanf перейде до читання наступної змінної.
  • Найменша невідповідність формату даних, що вводяться, призводить до непередбачуваних результатів роботи програми. Добре, якщо програма просто завершиться помилково. Але часто програма продовжує працювати і робить це неправильно.
  • scanf("%20s …", …); Якщо вхідний потік перевищує 20 символів, то scanf прочитає перші 20 символів і або припинить роботу, або перейде до читання наступної змінної, якщо вона вказана. При цьому наступний виклик scanf продовжить читання вхідного потоку з місця, де зупинилася робота попереднього виклику scanf. Якщо при читанні перших 20 символів буде зустрінутий розділовий символ, scanf припинить свою роботу або перейде до читання наступної змінної, навіть якщо не рахував 20 символів для першої змінної. При цьому всі незліченні символи причепляться до наступної змінної.
  • Якщо набір сканованих символів почати зі знака «^», то scanf читатиме дані до тих пір, поки не зустріне розділовий символ або символ набору. Наприклад, "%[^A-E1-5]" зчитуватиме дані з потоку, доки не буде зустрінутий один із символів англійського алфавіту від А до Е у верхньому регістрі або одне з чисел від 1 до 5.
  • Функція scanf C за описом повертає число, що дорівнює успішній кількості записів у змінні. Якщо scanf записує 3 змінні, то результатом успішної роботи функції буде повернення числа 3. Якщо scanf не зміг записати жодної змінної, то результат буде 0. І, нарешті, якщо scanf взагалі не зміг почати працювати з якихось причин, результатом буде EOF .
  • Якщо функція scanf() завершила свою роботу неправильно. Наприклад, scanf("%d", &x) - очікувалося число, а на введення прийшли символи. Наступний дзвінок scanf() почне свою роботу з місця в потоці введення, де завершився попередній дзвінок функції. Щоб подолати проблему, необхідно позбутися проблемних символів. Це можна зробити, наприклад, викликавши scanf("%*s"). Тобто, функція прочитає рядок символів та викине його. Таким чином можна продовжити введення потрібних даних.
  • У деяких реалізаціях scanf() у наборі символів, що скануються, неприпустиме використання «-».
  • Специфікатор "%c" читає кожен символ потоку. Тобто символ – роздільник він також читає. Щоб пропустити роздільник і продовжити читати потрібний символ, можна використовувати %1s.
  • При використанні специфікатора «c» можна використовувати ширину “%10c”, проте тоді у вигляді змінної функції scanf необхідно передати масив елементів типу char.
  • "%" - це означає "всі маленькі літери англійського алфавіту", а "%" - означає просто 3 символи: 'z', 'a', '-'. Інакше кажучи, символ «-» означає діапазон лише тому випадку, якщо стоїть між двома символами, які у правильному порядку проходження. Якщо «-» знаходиться в кінці виразу, на початку або в неправильному порядку символів по обидва боки від них, то він є просто символом дефісу, а не діапазоном.

Висновок

На цьому завершується опис scanf C. Це хороша зручна функція для роботи в невеликих програмахта при використанні процедурного методу програмування. Однак головним недоліком є ​​кількість непередбачуваних помилок, які можуть виникнути під час використання scanf. Тому опис scanf C при програмуванні найкраще тримати перед очима. У великих професійних проектах використовуються потоки iostream, через те, що мають більш високорівневі можливості, краще дозволяють відловлювати і обробляти помилки, а також працювати зі значними обсягами інформації. Також слід зазначити, що опис scanf C російською доступно на мережевих багатьох джерелах, як і приклади її використання, зважаючи на вік функції. Тому, за необхідності, завжди можна знайти відповідь на тематичних форумах.

Стандартна бібліотека C/C++ включає ряд функцій для читання та запису на консолі (клавіатура та монітор). Ці функції читають та пишуть дані як простий потік символів.

Поняття потоку (stream), використане програмування, тісно пов'язані з звичайним, побутовим розумінням цього терміну. Потік введення можна порівняти з трубою, якою вода (інформація) надходить у басейн (пам'ять комп'ютера), потік виведення - з трубою, якою вода виходить із басейну. Важливою особливістюцієї труби є те, що у кожний момент часу дані можуть рухатися лише в одному напрямку. Навіть якщо та сама труба використовується для введення і виведення, це може відбуватися одночасно: для перемикання напрями потоку його необхідно зупинити, виконати деякі дії і лише потім направити потік у зворотному напрямку. Іншою особливістю потоку є те, що він майже ніколи не вичерпується. Іноді він висихає, але цей період може бути довгим, якщо система функціонує нормально.

Функція стандартного виводу printf()

Функція printf() є стандартною функцією виводу. За допомогою цієї функції можна вивести на екран монітора рядок символів, число, значення змінної...

Функція printf() має прототип у файлі stdio.h
int printf(char *керівник, ...);

У разі успіху, функція printf() повертає кількість виведених символів.

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

Функція printf() – це функція форматованого виводу. Це означає, що у параметрах функції необхідно вказати формат даних, які виводитимуться. Формат даних зазначається специфікаторами формату. Специфікатор формату починається з символу % за яким слідує код формату.

Специфікатори формату:

символ
%d ціле десяткове число
%i ціле десяткове число
%e десяткове число у вигляді x.xx e+xx
%E десяткове число у вигляді x.xx E+xx
%f
%F десяткове число з плаваючою комою xx.xxxx
%g %f або %e, що коротше
%G %F або %E, що коротше
%o вісімкове число
%s рядок символів
%u беззнакове десяткове число
%x шістнадцяткове число
%X шістнадцяткове число
%% символ %
%p покажчик
%n покажчик

Крім того, до команд формату можуть бути використані модифікатори l і h.

%ld друк long int
%hu друк short unsigned
%Lf друк long double

У специфікаторі формату після символу % може бути вказана точність (число цифр після коми). Точність задається так: %.n<код формата>. Де n – число цифр після коми, а<код формата>- один із кодів наведених вище.

Наприклад, якщо ми маємо змінну x=10.3563 типу float і ми хочемо вивести її значення з точністю до 3-х цифр після коми, то ми повинні написати:

printf("Змінна x = %. 3f", x);

Результат:
Змінна x = 10.356

Ви також можете вказати мінімальну ширину поля для друку. Якщо рядок або число більший за вказану ширину поля, рядок або число друкується повністю.

Наприклад, якщо ви напишіть:

printf("%5d",20);

то результат буде наступним:
20

Зверніть увагу, що число 20 надрукувалося не від початку рядка. Якщо ви хочете, щоб невикористані місця поля заповнювалися нулями, потрібно поставити перед шириною поля символ 0.

Наприклад:

printf("%05d",20);

Результат:
00020

Крім специфікаторів формату даних у рядку, що управляє, можуть знаходитися управляючі символи:

\b BS, вибій
\f Нова сторінка, переклад сторінки
\n Новий рядок, переклад рядка
\r Повернення каретки
\t Горизонтальна табуляція
\v Вертикальна табуляція
\" Подвійна лапка
\" Апостроф
\\ Зворотня коса риса
\0 Нульовий символ, нульовий байт
\a Сигнал
\N Вісімкова константа
\xN Шістнадцяткова константа
\? Знак питання

Найчастіше ви використовуватимете символ \n. За допомогою цього керуючого символу можна переходити на новий рядок. Подивіться приклади програм і ви все зрозумієте.

приклади програм.

/* Приклад 1 */
#include

void main(void)
{
int a, b, c; // Оголошення змінних a, b, c
a=5;
b = 6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Результат роботи програми:
a=5, b=6, c=9

/* Приклад 2 */
#include

void main(void)
{
float x,y,z;

X = 10.5;
y=130.67;
z=54;

Printf("Координати об'єкта: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Результат роботи програми:
Координати об'єкта: x:10.50, y:130.67, z:54.00

/* Приклад 3 */
#include

void main()
{
int x;

X = 5;
printf("x=%d", x*2);
}

Результат роботи програми:
x=10

/* Приклад 4 */
#include

void main(void)
{
printf("Текст в лапках");
printf("\nЗміст кисню: 100%");
}

Результат роботи програми:
"Текст у лапках"
Вміст кисню: 100%

/* Приклад 5 */
#include

void main(void)
{
int a;

A=11; // 11 у десятковому дорівнює b у шістнадцятковій
printf("a-dec=%d, a-hex=%X",a,a);
}

Результат роботи програми:
a-dec=11, a-hex=b

/* Приклад 6 */
#include

void main(void)
{
char ch1, ch2, ch3;

Ch1 = "A";
ch2 = "B";
ch3 = "C";

Printf("%c%c",ch1,ch2,ch3);
}

Результат роботи програми:
ABC

/* Приклад 7 */
#include

void main(void)
{
char *str="Мій рядок.";

Printf("Це %s",str);
}

Результат роботи програми:
Це Мій рядок.

/* Приклад 8 */
#include

void main(void)
{
printf("Здрастуйте!\n"); // Після друку буде перехід на новий рядок - \n
printf("Мене звуть Павло"); // Це буде надруковано на новому рядку
}

Результат роботи програми:
Доброго дня!
Мене звати Павел.

Функція стандартного введення scanf()

Функція scanf() – функція форматованого введення. З її допомогою можна вводити дані зі стандартного пристрою введення (клавіатури). Введеними даними можуть бути цілі числа, числа з плаваючою комою, символи, рядки та покажчики.

Функція scanf() має наступний прототип у файлі stdio.h:
int scanf(char *керуючий рядок);

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

Керуючий рядок містить три види символів: специфікатори формату, пробіли та інші символи. Специфікатори формату починаються із символу %.

Специфікатори формату:

При введенні рядка за допомогою функції scanf() (специфікатор формату %s), рядок вводитиметься до першого пробілу!! тобто. якщо ви вводите рядок "Привіт мир!" з використанням функції scanf()


scanf("%s",str);

то після введення результуючий рядок, який зберігатиметься в масиві str буде складатися з одного слова "Привіт". ФУНКЦІЯ Вводить РЯДОК ДО ПЕРШОГО ПРОБІЛУ! Якщо ви хочете вводити рядки з пробілами, використовуйте функцію

char * gets (char * buf);

За допомогою функції gets() ви зможете вводити повноцінні рядки. Функція gets() читає символи з клавіатури до появи символу нового рядка(\n). Сам символ нового рядка з'являється, коли ви натискаєте клавішу enter. Функція повертає вказівник на buf. buf - буфер (пам'ять) для рядка, що вводиться.

Хоча gets() не входить у тему цієї статті, але все ж таки напишемо приклад програми, яка дозволяє ввести цілий рядок з клавіатури і вивести її на екран.

#include

void main(void)
{
char buffer; // масив (буфер) для рядка, що вводиться

Gets(buffer); // вводимо рядок і натискаємо enter
printf("%s",buffer); // Виведення введеного рядка на екран
}

Ще одне важливе зауваження! Для введення даних за допомогою функції scanf(), їй як параметри потрібно передавати адреси змінних, а не самі змінні. Щоб отримати адресу змінної, потрібно поставити перед іменем змінної знак &(амперсанд). Знак & означає взяття адреси.

Що означає адреса? Спробую пояснити. У програмі ми маємо змінну. Змінна зберігає значення у пам'яті комп'ютера. Так ось адреса, яку ми отримуємо за допомогою & це адреса в пам'яті комп'ютера, де зберігається значення змінної.

Давайте розглянемо приклад програми, який показує нам як використовувати &

#include

void main(void)
{
int x;

Printf("Введіть змінну x:");
scanf("%d",&x);
printf("Змінна x=%d",x);
}

Тепер давайте повернемося до рядка функції scanf(). Ще раз:

int scanf(char *керуючий рядок);

Символ пробілу в рядку керування дає команду пропустити один або більше пробілів в потоці введення. Крім пробілу може сприйматися символ табуляції або нового рядка. Ненульовий символ вказує на читання та відкидання цього символу.

Розділювачами між двома цифрами, що вводяться, є символи пробілу, табуляції або нового рядка. Знак * після % та перед кодом формату (специфікатором формату) дає команду прочитати дані зазначеного типу, але не надавати це значення.

Наприклад:

scanf("%d%*c%d",&i,&j);

при введенні 50+20 присвоє змінної i значення 50, змінної j - значення 20, а символ буде прочитаний і проігнорований.

У команді формату може бути вказана максимальна ширина поля, яка підлягає зчитуванню.

Наприклад:

scanf("%5s",str);

вказує на необхідність прочитати з потоку введення перші 5 символів. При введенні 1234567890ABC масив str міститиме лише 12345, інші символи будуть проігноровані. Розділювачі: пробіл, символ табуляції та символ нового рядка – при введенні символу сприймаються, як і всі інші символи.

Якщо в рядку, що управляє, зустрічаються будь-які інші символи, то вони призначаються для того, щоб визначити і пропустити відповідний символ. Потік символів 10plus20 оператором

scanf("%dplus%d",&x,&y);

присвоє змінної x значення 10, змінної y - значення 20, а символи plus пропустить, оскільки вони зустрілися в рядку, що управляє.

Однією з потужних особливостей функції scanf() є можливість завдання множини пошуку (scanset). Безліч пошуку визначає набір символів, з якими будуть порівнюватися символи, що читаються функцією scanf(). Функція scanf() читає символи доти, доки вони зустрічаються у безлічі пошуку. Як тільки введений символ не зустрівся в безлічі пошуку, функція scanf() переходить до наступного специфікатора формату. Безліч пошуку визначається списком символів, укладених у квадратні дужки. Перед відчиняючою дужкою ставиться знак %. Давайте розглянемо це з прикладу.

#include

void main(void)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Введемо набір символів:
12345abcdefg456

На екрані програма видасть:
12345
abcdefg456

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

scanf("%10", str1);

Можна також визначити символи, які не входять до пошуку. Перед першим із цих символів ставиться знак ^. Безліч символів розрізняє малі та великі літери.

Нагадаю, що при використанні функції scanf(), їй як параметри потрібно передавати адреси змінних. Вище було написано код:

char str; // масив на 80 символів
scanf("%s",str);

Зверніть увагу, що перед str не стоїть символ &. Це зроблено тому, що str є масивом, а ім'я масиву – str є вказівником на перший елемент масиву. Тому знак & не ставиться. Ми вже передаємо функції scanf() адресу. Ну простіше кажучи str це адреса в пам'яті комп'ютера, де буде зберігатися значення першого елемента масиву.

приклади програм.

приклад 1.
Ця програма виводить на екран запит "Скільки вам років?:" і чекає на введення даних. Якщо, наприклад, ввести число 20, програма виведе рядок "Вам 20 років.". При виклику функції scanf(), перед змінною age ми поставили знак &, оскільки функції scanf() потрібні адреси змінних. Функція scanf() запише введене значення за вказаною адресою. У нашому випадку введене значення 20 буде записано на адресу змінної age.

/* Приклад 1 */

#include

void main(void)
{
int age;

Printf("\nСкільки вам років?:");
scanf("%d",&age);
printf("Вам %d років.", age);
}

приклад 2.
Програма калькулятор. Цей калькулятор може лише складати числа. При введенні 100+34 програма видасть результат: 100+34=134.

/* Приклад 2 */

#include

void main(void)
{
int x, y;

Printf("\nКалькулятор:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

Приклад 3.
Цей приклад показує, як встановити ширину поля зчитування. У прикладі ширина поля дорівнює п'яти символам. Якщо ви введете рядок з великою кількістю символів, всі символи після 5-го будуть відкинуті. Зверніть увагу на дзвінок функції scanf(). Знак & не стоїть перед ім'ям масиву name, тому що ім'я масиву name є адресою першого елемента масиву.

/* Приклад 3 */

#include

void main(void)
{
char name;

Printf("\nВведіть ваш логін (не більше 5 символів):");
scanf("%5s", name);
printf("\nВи ввели %s", name);
}

Приклад 4.
Останній приклад у цій статті показує, як можна використовувати безліч пошуку. Після запуску введіть число від 2 до 5.

/* Приклад 4 */

#include

void main(void)
{
char bal;

Printf("Ваша оцінка 2,3,4,5:");
scanf("%", &bal);
printf("\nОцінка %c", bal);
}

Мова програмування C++

Останнє оновлення: 28.08.2017

Мова програмування С++ представляє високорівневу мовну програмування загального призначення зі статичною типізацією, що підходить для створення найрізноманітніших додатків. На сьогоднішній день С++ є однією з найпопулярніших та найпоширеніших мов.

Своїм корінням він сягає мови Сі, який був розроблений в 1969-1973 роках в компанії Bell Labs програмістом Деннісом Рітчі (Dennis Ritchie). На початку 1980-х років датський програміст Бьорн Страуструп (Bjarne Stroustrup), який на той час працював у компанії Bell Labs, розробив С++ як розширення до мови Сі. Практично спочатку C++ легко доповнював мову Си деякими здібностями об'єктно-орієнтованого програмування. І тому сам Страуструп спочатку називав його як "C with classes" ("Сі з класами").

згодом нова мовастав набирати популярності. До нього були додані нові можливості, які робили його не просто доповненням до Сі, а новою мовою програмування. У результаті "Сі з класами" було перейменовано на С++. І з тих по обидві мови стали розвиватися незалежно одна від одної.

З є потужною мовою, успадкувавши від Сі багаті можливості по роботі з пам'яттю. Тому нерідко С++ знаходить своє застосування у системному програмуванні, зокрема, під час створення операційних систем, драйверів, різних утиліт, антивірусів і т.д. До речі, ОС Windows переважно написана на С++. Але лише системним програмуванням застосування даної мовине обмежується. С++ можна використовувати у програмах будь-якого рівня, де важливі швидкість роботи та продуктивність. Нерідко він застосовується для створення графічних додатків, різних прикладних програм. Також особливо часто його використовують для створення ігор з багатою насиченою візуалізацією. Крім того, останнім часом набирає хід мобільний напрямок, де С++ теж знайшов своє застосування. І навіть у веб-розробці також можна використовувати С++ для створення веб-додатків або якихось допоміжних сервісів, які обслуговують веб-програми. Загалом С++ - мова широкого користування, якою можна створювати практично будь-які види програм.

С++ є мовою, що компілюється, а це означає, що компілятор транслює вихідний кодна С++ виконуваний файл, який містить набір машинних інструкцій. Але різні платформи мають свої особливості, тому скомпіловані програми не можна просто перенести з однієї платформи в іншу і там вже запустити. Однак на рівні вихідного коду програми на С++ переважно мають переносимість, якщо не використовуються якісь специфічні для поточної ос функції. А наявність компіляторів, бібліотек та інструментів розробки майже під всі поширені платформи дозволяє компілювати той самий вихідний код на С++ у додатки під ці платформи.

На відміну від Сі мова C++ дозволяє писати додатки в об'єктно-орієнтованому стилі, представляючи програму як сукупність класів і об'єктів, що взаємодіють між собою. Що полегшує створення великих додатків.

Основні етапи розвитку

У 1979-80 роках Бьорн Страуструп розробив розширення до мови Сі - "Сі з класами". У 1983 мову було перейменовано на С++.

У 1985 році була випущена перша комерційна версія мови С++, а також перше видання книги "Мова програмування C++", яка представляла перший опис цієї мови за відсутності офіційного стандарту.

У 1989 була випущена Нова версіямови C++ 2.0, яка включала низку нових можливостей. Після цього мова розвивалася відносно повільно аж до 2011 року. Але при цьому в 1998 році була зроблена перша спроба стандартизації мови організацією ISO (International Organiztion for Standartization). Перший стандарт отримав назву ISO/IEC 14882:1998 або скорочено C++98. Надалі у 2003 було видано нову версію стандарту C++03.

У 2011 році було видано новий стандарт C++11, який містив безліч додавань та збагачував мову С++ великою кількістюнових функціональних можливостей Після цього у 2014 році було випущено невелике додавання до стандарту, відоме також як C++14. І ще один ключовий реліз мови намічений на 2017 рік.

Компілятори та середовища розробки

Для розробки програм на С++ необхідний компілятор - він транслює вихідний код мовою С++ виконуваний файл, який можна запускати. Але зараз є дуже багато різних компіляторів. Вони можуть відрізнятися за різними аспектами, зокрема щодо реалізації стандартів. Базовий список компіляторів для С++ можна переглянути у вікіпедії. Рекомендується для розробки вибирати ті компілятори, які розвиваються та реалізують усі останні стандарти. Так, протягом усього керівництва переважно використовуватиметься вільно розповсюджуваний компілятор g++, розроблений у рамках проекту GNU.

Також для створення програм можна використовувати вбудовані середовища розробки IDE, такі як Visual Studio, Netbeans, Eclipse, Qt і т.д.

Вивчення основ та тонкощів мови програмування C++. Підручник з практичними завданнями та тестами. Бажаєте навчитися програмувати? Тоді Ви за адресою – тут безкоштовне навчанняпрограмування. Неважливо, чи маєте Ви досвід чи ні, ці уроки з програмування допоможуть Вам почати створювати, компілювати та налагоджувати програми мовою C++ у різних середовищах розробки: Visual Studio, Code::Blocks, Xcode або Eclipse.

Безліч прикладів та докладних роз'яснень. Добре підійдуть як для новачків (чайників), так і для більш просунутих. Пояснюється все з нуля і до деталей. Ці уроки (200+) дадуть Вам хорошу базу/фундамент у розумінні програмування не тільки С++, але і в інших мовах програмування. І це абсолютно безкоштовно!

Також розглядається покрокове створенняігри на С++, графічна бібліотека SFML та більше 50 завдання для перевірки своїх навичок та знань у C++. Додатковим бонусом є.

За репост +20 до карми та моя подяка!

Розділ №0. Вступ. Початок роботи

Розділ №1. Основи C++

Розділ №2. Змінні та основні типи даних у C++

Розділ №3. Оператори C++

Розділ №4. Область видимості та інші типи змінних C++

Розділ №5. Порядок виконання коду у програмі. Цикли, розгалуження C++

Ці навчальні уроки призначені для всіх, незалежно від того, новачок ви у програмуванні або у вас вже є великий досвід програмування іншими мовами! Даний матеріал для тих, хто хоче вивчити мови С/С від самих його основ до найскладніших конструкцій.

C++ є мовою програмування, знання цієї мови програмування дозволить вам керувати вашим комп'ютером вищому рівні. В ідеалі ви можете змусити комп'ютер зробити все, що захочете. Наш сайт допоможе вам у освоєнні мови програмування C++.

Встановлення /IDE

Найперше, що ви повинні зробити, перш ніж приступити до вивчення C++, це переконатися, що у вас є IDE - інтегроване середовище розробки (програма в якій ви програмуватимете). Якщо у вас немає IDE, то вам сюди . Коли ви визначитеся з вибором IDE, встановіть її і потренуйтеся створювати прості проекти.

Введення в мову C++

Мова C++ є набором команд, які говорять комп'ютеру, що необхідно зробити. Цей набір команд зазвичай називається вихідний код або просто код. Командами є або «функції» або « ключові слова». Ключові слова (зарезервовані слова С/С) є основними будівельними блоками мови. Функції є складними будівельними блоками, оскільки записані вони в термінах більш простих функцій - ви це побачите в нашій першій програмі, яка показана нижче. Така структура функцій нагадує зміст книги. Зміст може показувати розділи книги, кожен розділ у книзі може мати свій зміст, що складається з пунктів, кожен пункт може мати свої підпункти. Хоча C++ надає багато загальних функційі зарезервованих слів, які ви можете використати, таки виникає потреба в написанні своїх власних функцій.

У якій частині програми початок? Кожна програма в C++ має одну функцію, її називають головною або main-функцією, виконання програми починається саме з цієї функції. З головної функції, Ви також можете викликати будь-які інші функції, неважливо, чи вони написані нами, або, як згадувалося раніше, надаються компілятором.

То як же отримати доступ до цих Стандартних функцій? Щоб отримати доступ до стандартним функціям, що постачаються з компілятором, необхідно підключити заголовний файл використовуючи препроцесорну директиву - #include . Чому це ефективно? Давайте подивимося на прикладі робочої програми:

#include << "Моя первая программа на С++\n"; cin.get(); }

Докладно розглянемо елементи програми. #include це директива «препроцесору», яка повідомляє компілятор помістити код із заголовного файлу iostream в нашу програму перед тим як створити файл, що виконується. Підключивши до програми заголовний файл, ви отримуєте доступ до безлічі різних функцій, які можете використовувати у своїй програмі. Наприклад, оператору сout потрібно iostream. Рядок using namespace std; повідомляє компілятор, що потрібно використовувати групу функцій, які є частиною стандартної бібліотеки std . У тому числі цей рядок дозволяє програмі використовувати оператори, такі як cout. Крапка з комою є частиною синтаксису C++. Вона повідомляє компілятор, що це кінець команди. Трохи пізніше ви побачите, що точка з комою використовується для завершення більшості команд C++.

Наступний важливий рядок програми int main(). Цей рядок повідомляє компілятор, що є функція з ім'ям main , і що функція повертає ціле число типу int . Фігурні дужки (і) сигналізують про початок (і кінці) функції. Фігурні дужки використовуються і в інших блоках коду, але завжди позначають одне — початок і кінець блоку, відповідно.

C++ об'єкт cout використовується для відображення тексту (вимовляється як «Cі аут»). Він використовує символи<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Наступна команда cin.get(). Це ще один виклик функції, яка зчитує дані із вхідного потоку даних та очікує натискання клавіші ENTER. Ця команда зберігає консольне вікно від закриття, доки не буде натиснуто клавішу ENTER. Це дає вам час для того, щоб переглянути результат виконання програми.

Після досягнення кінця головної функції (закриває фігурна дужка), наша програма поверне значення 0 для операційної системи. Це значення, що повертається, є важливим, оскільки, проаналізувавши його, ОС може судити про те, чи успішно завершилася наша програма чи ні. Значення 0, що повертається, означає успіх і повертається автоматично (але тільки для типу даних int , інші функції, вимагають вручну повертати значення), але якщо б ми хотіли повернути щось інше, наприклад 1, ми повинні були б зробити це вручну.

#include using namespace std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

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

Обов'язково коментуйте свої програми!

Додайте коментарі до коду, щоб зробити його зрозумілішим не тільки для себе, але й для інших. Компілятор ігнорує коментарі під час виконання коду, що дозволяє використовувати будь-яку кількість коментарів, щоб описати реальний код. Щоб створити коментар, використовуйте або // , який повідомляє компілятору, що решта рядка є коментарем або /* і потім */ . Коли ви вчитеся програмувати, корисно мати можливість коментувати деякі ділянки коду, щоб побачити, як змінюється результат роботи програми. Детально прочитати про техніку коментування ви можете.

Що робити з усіма цими типами змінних?

Іноді це може спантеличити — мати кілька типів змінних, коли здається, що деякі типи змінних є надмірними. Дуже важливо використовувати правильний тип змінної, так як деяким змінним потрібно більше пам'яті, ніж іншим. Крім того, через спосіб зберігання в пам'яті, числа з плаваючою точкою, типи даних float і double є "неточним", і не повинні використовуватися, коли необхідно зберегти точне ціле значення.

Оголошення змінних C++

Щоб оголосити змінну використовується синтаксис тип<имя>; . Ось деякі приклади оголошення змінних:

Int num; char character; float num_float;

Допустимо оголошення кількох змінних одного і того ж типу в одному рядку, для цього кожна з них має бути відділена комою.

Int x, y, z, d;

Якщо ви дивилися уважно, ви, можливо, бачили, що оголошення змінної завжди супроводжується крапкою з комою. Докладніше про угоду - «про ім'я змінних», можна.

Поширені помилки при оголошенні змінних C++

Якщо ви спробуєте використовувати змінну, яку не оголосили, ваша програма не буде скомпілювана, і ви отримаєте повідомлення про помилку. У C++ всі ключові слова мови, всі функції і всі змінні чутливі до регістру.

Використання змінних

Тепер ви знаєте, як оголосити змінну. Ось приклад програми, що демонструє використання змінної:

#include using namespace std; int main() ( int number; cout<< "Введите число: "; cin >> number; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Давайте розглянемо цю програму та вивчимо її код, рядок за рядком. Ключове слово int свідчить, що number — ціле число. Функція cin >> зчитує значення в number , користувач повинен натиснути на введення після введеного числа. cin.ignore() — функція, яка зчитує символ та ігнорує його. Ми організували своє введення в програму, після введення числа ми натискаємо клавішу ENTER, символ який також передається в потік введення. Нам це не потрібне, тому ми його відкидаємо. Майте на увазі, що змінна була оголошена цілого типу, якщо користувач спробує ввести десяткове число, воно буде обрізане (тобто десяткова частина числа ігноруватиметься). Спробуйте ввести десяткове число або послідовність символів, коли ви запустите приклад програми, відповідь залежатиме від вхідного значення.

Зверніть увагу, що під час друку зі змінної лапки не використовуються. Відсутність лапок повідомляє компілятору , що є змінна, і, отже, у тому, що програма має перевіряти значення змінної у тому, щоб замінити ім'я змінної її значення під час виконання. Декілька операторів зсуву в одному рядку цілком прийнятно і висновок виконуватиметься в тому ж порядку. Ви повинні розділяти рядкові літерали (рядки, укладені в лапки) та змінні, даючи кожному свій оператор зсуву<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Зміна та порівняння величин

Звичайно, незалежно від того, який тип даних ви використовуєте, змінні не мають особливого інтересу без можливості зміни їх значення. Далі показані деякі оператори, які використовуються разом із змінними:

  • * множення,
  • - віднімання,
  • + додавання,
  • / поділ,
  • = присвоєння,
  • == рівність,
  • > більше,
  • < меньше.
  • != Нерівно
  • >= більше чи одно
  • <= меньше или равно

Оператори, які виконують математичні функції, повинні бути використані праворуч від знака присвоєння, щоб присвоїти результат змінної зліва.

Ось кілька прикладів:

A = 4*6; // Використання рядкового коментаря та точки з комою, a дорівнює 24 a = a + 5; // дорівнює сумі вихідного значення та п'яти a == 5 // не присвоюється п'ять, виконується перевірка, а одно 5 чи ні

Ви часто будете використовувати == у таких конструкціях, як умовні оператори та цикли.

A< 5 // Проверка, a менее пяти? a >5// Перевірка, a більше п'яти? a == 5 // Перевірка, a дорівнює п'яти? a != 5// Перевірка, а нерівно п'яти? a >= 5 // Перевірка, a більше чи дорівнює п'яти? a<= 5 // Проверка, a меньше или равно пяти?

Дані приклади не дуже наочно показують використання знаків порівняння, але коли ми почнемо вивчати оператори вибору, ви зрозумієте, навіщо це потрібно.



Завантаження...
Top