Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samostoyatelnye_po_S.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
672 Кб
Скачать
☆

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

Структура (синтаксис) звернення до функції:

scanf ("рядок формату", список аргументів);

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

Особливості функції:

в мові C в рядку формату рекомендується писати тільки специфікатори форматів; кількість специфікатор має дорівнювати числу аргументів в рядку; кожен специфікатор має ту ж структуру, що і у функції printf ();

список аргументів може складатися з одного або декількох аргументів; роздільником у списку аргументів служить [,];

в якості аргументів функції використовуються тільки адреси змінних.

Завданням аргументу в даної функції є вказівка ​​адреси комірки пам'яті, куди повинно бути поміщене вводиться значення. Так, символ & позначає операцію одержання адреси змінної, тобто конструкція & p забезпечує введення значення в комірку пам'яті, де розміщена змінна p.

При використанні функції scanf () необхідно пам'ятати два правила:

при зчитуванні значень для змінних простого типу перед ім'ям змінної ставиться символ &;

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

В якості прикладу наведемо програму введення з клавіатури довільного символу і відтворення на екрані монітора як самого символу, так і його коду ASCII:

# Include <stdio.h>

int main (void)

{

char c;

printf ("\ n Input your symbol");

scanf ("% c", & c);

printf ("\ n Code of your symbol% ​​c is equal% d", c, c);

return 0;

}

Робота функції scanf ()

При виконанні програми в момент виклику функції scanf () програма призупиняється в очікуванні введення даних. Після введення користувачем символу з клавіатури і натиснення клавіші Enter виконання програми буде продовжено.

Слід зазначити, що іноді під час виконання програми спостерігається пропуск введення в символьну змінну. Причина такої помилки - коди символів, що залишилися в буфері клавіатури після попереднього введення даних, звичайно це бувають керуючі коди. У цьому випадку функція scanf () не зупиняє роботу програми в очікуванні введення даних, а зчитує в символьну змінну код, що зберігся в буфері клавіатури після попереднього введення.

Щоб уникнути пропуску введення, слід перед введенням в символьну змінну очистити буфер клавіатури (вхідний потік stdin) за допомогою функції fflush ():

# Include <stdio.h>

int main (void)

{char c, d;

printf ("Введіть перший символ->");

scanf ("% c", & c);

printf ("Введіть другий символ->");

fflush (stdin); / * Очищення буфера клавіатури * /

scanf ("% c", & d);

printf ("Ви ввели:% c% c \ n", c, d);

return 0;}

Використовуючи одну функцію scanf (), можна вводити значення змінних різних типів, наприклад:

int a;

float b;

char c [25];

scanf ("% d% f% s", & a, & b, c);

Для введення числових значень можна застосувати наступні рядки формату:

int a;

float b, w;

scanf ("% d% f% f", & a, & b, & w);

Якщо функція scanf () заповнює кілька змінних, при виконанні програми значення можуть вводитися або разом в одному рядку через пропуск, або кожне вводиться в окремому рядку, і кожен введення завершується натисканням клавіші Enter.

Часто програмісти уникають користуватися функцією scanf (). Якщо дані, прочитані scanf (), не відповідають рядку формату, то функція може поводитися непередбачувано.

Альтернативою потужною, але вимогливою функції scanf () є використання функції gets (), яка читає дані, що вводяться в зазначений програмістом символьний буфер і, на відміну від функції scanf (), дозволяє ввести рядок з пробілами. Функція gets () також оголошена в заголовному файлі stdio.h.

Введені дані представляються у вигляді рядка. Якщо введені дані повинні представляти числові значення, то викликається одна з функцій atoi (), atol (), або atof () для перетворення рядка відповідно в ціле, довге ціле або дійсне число. Функції перетворення оголошені в заголовному файлі stdlib.h. Якщо дані, введені з клавіатури, не відповідають очікуваному типу даних, функції перетворення формують код помилки. Наприклад, якщо atoi () не може виконати перетворення в ціле, вона повертає нуль. При успішному перетворенні - повертає значення введеного цілого числа.

Таким чином, можна представити наступну програму введення числа:

# include <stdio.h> / * У stdio.h оголошена функція gets * /

# include <stdlib.h> / * У stdlib.h оголошені функції перетворення рядків * /

int main (void)

{char c [10]; / * Оголошення рядки з 10 елементів * /

int age;

gets (c);

age = atoi (c);

...

return 0;}

Питання для контролю:

1. Що робить команда scanf ()?

2. Що може містити рядок функції scanf (),що знаходиться в лапках?

3. Яке призначення & в функції scanf ()?

Література:

1. Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. – с. 308-312

Урок №47

(згідно робочої навчальної програми)

Тема:Керування потоками введення-виведення

Питання:

1.Призначеня функцій бібліотеки введення-виведення

2.Макрокоманди

3. Потокові інтерфейси введення-виведення

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]