Форматоване введення-виведення

Форматоване введення-виведення величин здійснюється з використанням функцій scanf та printf, які успадковані з мови С. Щоб зв’язати програму користувача зі стандартною бібліотекою, де знаходяться ці функції, необхідно на початку програми включити заголовний файл stdio.h.

Функція scanf, що забезпечує форматоване введення даних, має змінне число параметрів, при цьому перед відповідним параметром ставиться знак «&» — символ взяття адреси змінної. Наприклад, 1 означає адресу змінної х1, а не значення, яке ця змінна має в даний момент. Рядок форматів функції scanf вказує, які дані очікуються на вході. Якщо функція зустрічає у форматному рядку знак « % », за яким розташований знак перетворення, то на вході будуть пропускатися символи, доки не з’явиться деякий непорожній символ.

Форма запису функції scanf має вигляд:

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

Рядок форматних кодів являє собою таку структуру запису:

%[ * ][довжина][f|n][h|l] тип,

де «%» — ознака початку форматного коду. Якщо за символом «% » йде символ, що не є символом керування форматом, то він розглядається як звичайна послідовність символів. При цьому наступні за ним символи (до наступного символу «%») також вважаються просто символами; якщо за символом «%» йде символ «*», то присвоювання наступного вхідного поля приглушується, поле читається, але не зберігається;

довжина — позитивне десяткове ціле число, яке задає макси­мальне число символів, що може бути прочитане з вхідного потоку, доки не зустрінеться символ «  » (пропуск) або символ, який не може бути перетворений відповідно до заданого формату;

  f | n — дозволяють приглушити погодження за замовчуванням про використану модель пам’яті («далека», «близька» пам’ять);

  h | l — предикати, що визначають відповідно аргументи типів short і long;

  тип — задається одним із символів: d — десяткове ціле; і — десяткове, вісімкове чи шістнадцяткове ціле зі знаком; с — одиночний символ;u — беззнакове десяткове число; х, X — беззнакове шістнадцяткове число; 0 — вісімкове число; s — сприймає символи без перетворення до символу «\n» або пропуску, доки не буде досягнута задана довжина (при виведенні видає до пото­ку всі символи до символу «\0» або до досягнення специфікованої точності); f, F — значення з плаваючою крапкою; е, Е — значення у експоненціальній формі; G, g — значення зі знаком у формі f або е.

Аргументи у функції scanf мають бути записані у формі покажчиків, тобто у вигляді &х, &у, &mas[i] тощо. Для введен­ня змінних k (типу int) і р (типу float) цю функцію можна за­писати так:

scanf(” %d  %f   \n ”, &k, &р);.

Приклад 4.4. Ввести два числа та обчислити їх суму.

// Р4 4.СРР — ввод двух чисел и вычисление их суммы
#include <stdio.h>
#include <conio.h>
main( )
{ int a, b, c; 
scanf ( " %d  %d",&a,&b);     //ввод чисел 5 и 8
с = a + b;
printf ("Summa =%d \n", c); 
getch();      //задержка экрана
}

У результаті виконання програми буде виведено: Summa=13.

Форматний рядок наказує функції scanf ввести десяткове число, яке треба помістити в змінну а, а потім перейти до на­ступного не порожнього символу і з цього моменту почати вве­дення нового десяткового числа, яке потім присвоюється змін­ній b. Якщо за рядком керування форматом аргументів більше, ніж специфікацій формату, зайві аргументи ігноруються. Ко­ли для специфікацій формату недостатньо аргументів, резуль­тат не визначений.

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

Функція printf може використовуватися, наприклад, для виведення повідомлення на екран:

printf ("Введите исходные данные \n");

Для звертання до функції використовуються параметри, якi розташовані у круглих дужках. Найчастіше функція printf реалізується для виведення значень змінних. Першим аргументом у звертанні до функції ставиться рядок форматів (береться в лапки), а наступними, якщо вони є, — об’єкти, що виводяться.

Рядок форматів може включати звичайні символи, які копіюються при виведенні, і специфікації перетворення, що починаються із символу«% », за специфікаціями йде символ перетворення. Кожна специфікація перетворення відповідає одному з аргументів, що йдуть за форматним рядком, і між ними встановлюється взаємно однозначна відповідність, наприклад:

printf (“Значения а, Ь, с равны: %d %d. %d \n”, а, b, с);,

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

При виведенні функція printf використовує ті самі специ­фікації, що і функція scanf при введенні. Наприклад, у функ­ції printf вигляду

printf (” % с=%d \n”, g, g);

значення змінної g виводиться як символ алфавіту, а після зна­ка «=» — як числове значення. Перед символом перетворення може стояти числовий коефіцієнт, що вказує кількість позицій у виведеному рядку, відведених для елемента виведення. Список форматних кодів має таку форму запису:

% [прапорець] [довжина] [точність] [f | n] [h | l] тип ,

де прапорець — символ, що керує вирівнюванням виведення і виведенням пропусків, десяткової крапки, ознак чисел вісімкової і шістнадцяткової систем числення. Прапорець може за­даватися одним із символів:

  «-» — вирівнювання вліво усередині заданого поля;
  «+» — виведення знака числа;
  « » (пропуск) — приєднання пропуску до виведеного числа, якщо число є додатним і має тип зі знаком;
  «#» — виводиться ідентифікатор системи числення для цілих: 0 — для вісімкових чисел, чи — для шістнадцяткових чисел;

довжина — визначає мінімальну кількість виведених символiв, якщо довжина більше виведеної кількості символів, то ви­ведене значення доповнюється пропусками, у випадку, коли довжина менше кількості символів у виведеному значенні або вона не задана, виводяться всі символи значення (відповідно до поля точність, якщо воно є);

точність — задається цілим числом після крапки і визначає кількість виведених символів, кількість знаків після крапки; на відміну від поля довжини поле точність може привести до «зрізання» виведених даних.

Параметри f, n, h, l і тип списку форматних кодів за зміс­том аналогічні раніше описаним для функції scanf.

Виведення результатів з використанням форматних кодів функції printf може мати вигляд:

printf (” % 3.0 f % 6.1 f \ n ”, х, у);

Приклад 4.5. Обчислити значення функції у = ах2 – sinx, якщо а =  10,5; х є [-1; 2]; hx = 0,5.

Алгоритм розв’язання поставленої задачі розглянуто у при­кладі 1.1, а його програмна реалізація матиме такий вигляд:

// Р45.СРР — использование форматных кодов при выводе
#include <stdio.h>
#include <math.h>
#include <conio.h> 
main( )
{ float x, y, a(10.5); 
   printf ("\t Vivod rezultata\n"); 
   for (x = -1; x <= 2; x += 0.5)
    { у = a * pow(x,2) - sin(x);     //у = a*x*x - sin(x);
      printf (" \t x = % 4.1f    у = % 6.3f \n", x, y);
    }
 getch ();      //задержка экрана
}

Результати обчислення:
Vivod rezultata
x = -1.0 у =11.342
х = -0.5 у = 3.104
х = 0.0  у = 0.000
х = 0.5  у = 2.146
х = 1.0  у = 9.659
х = 1.5  у = 22.628
х = 2.0  у = 41.091.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *