Введення/виведення на консоль.
Функції getchar() та putchar(). Найпростішими функціями введення/виведення на консоль є getchar(), призначена для зчитування символу з клавіатури, та putchar(), призначена для відображення символа на екрані. Прототипи цих функцій:
int getchar(void);int putchar(int c);Функція getchar() повертає значення натиснутої клавіші та відображає символ на екрані. У багатьох бібліотеках компіляторів ця функція реалізована наступним чином: вона заповнює буфер введення, допоки не буде натиснуто клавішу Enter, і повертає символ після її натискання. В разі помилки обидві функції повертають EOF. Для забезпечення можливості використання цих функцій до коду програми має бути підключено заголовковий файл <stdio.h>.Альтернативними функціями читання символу з клавіатуриє getch() та getche(), їх прототипи:
int getch(void);int getche(void);Функція getch() після натискання клавіші символу негайно повертає значення без відображення символа на екрані. Функція getche() працює так само, як getch(), проте відображає символ на екрані. Для використання цих функцій до коду програми має бути підключено заголовковий файл <conio.h>.
Приклади використання:
char ch;
ch = toupper(getchar());
putchar(ch);Примітка. Функціїtoupper() та tolower() перетворюють символ в верхній та нижній регістр відповідно, якщо це можливо; інакше повертають незмінне значення. Для використання функцій до коду програми необхідно підключити заголовковий файл <ctype.h>.
Функції printf() та scanf(). Функції printf() таscanf()здійснюють форматне виведення та введення відповідно. Для забезпечення можливості використання цих функцій до коду програми має бути підключено заголовковий файл <stdio.h>.
Функція printf()здійснює виведення даних на консоль. Прототип функції:
int printf(const char *керуючий_рядок, ...);Керуючий рядок складається з символів, які необхідно вивести на екран, та специфікаторів перетворення, які визначають спосіб виводу аргументів. Специфікатор складається зі знака % та кода формату. Кількість специфікаторів та аргументів повинна бути однаковою. Специфікатори перетворення та аргументи повинні попарно відповідати один одному у напрямку зліва направо. Основні специфікатори преретворення для функції printf() подано в таблиці 1.7.
Таблиця 1.7 – Основні специфікатори перетворення для функції printf()
Код | Формат |
%a | шістнадцяткове у вигляді 0xh.hhhhp+d (тільки стандарт С99) |
%A | шістнадцяткове у вигляді 0Xh.hhhhP+d (тільки стандарт С99) |
%c | cимвол |
%d | десяткове ціле зі знаком |
%i | десяткове ціле зі знаком |
%e | експоненційне представлення (‘e’ на нижньому регістрі) |
%E | експоненційне представлення (‘E’ на верхньому регістрі) |
%f | десяткове з плаваючою крапкою |
%g | в залежності від того, яке виведення буде коротшим, використовується %e або %f |
%G | в залежності від того, яке виведення буде коротшим, використовується %E або %F |
%o | вісімкове без знака |
%s | рядок символів |
%u | десяткове ціле без знака |
%x | шістнадцяткове без знака (літери на нижньому регістрі) |
%X | шістнадцяткове без знака (літери на верхньому регістрі) |
%% | виводить знак % |
Приклад використання:
int i = 5;
printf("%d %d %d\n", i, i*i, i*i*i);
Примітка. Для введення та виведення даних можуть використовуватись комбінації спеціальних символів – керуючі послідовності. Наприклад, керуюча послідовність \n забезпечує перехід на новий рядок, \t – переведення курсору до наступної позиції табуляції, \a – подання звукового сигналу, \? – виведення знаку питання, \” – виведення символу лапок, \’ – виведення апострофа, \\ – виведення символу похилої риски та ін.
Для форматованого виведення результату використовуються модифікатори формата, які розташовують між знаком % та кодом формата. Модифікатор мінімальної ширини поля найчастіше використовується для виведення вмісту таблиць. Наприклад, %05d означає, що при виведенні число, кількість цифр в якому менша п’яти, буде доповнено такою кількістю нулів, щоб кількість цифр в числі дорівнювала п’яти, а %5d дозволить вирівняти стовпці таблиці по вертикалі без доповнення нулями.
Наприклад:
double number;
number = 10.111111;
printf("%012f\n", number);Результат:00010.111111int i = 5;
printf("%8d %8d %8d\n", i, i*i, i*i*i);
printf("%8d %8d %8d\n", 10 * i, 10 * i*i, 10 * i*i*i);Результат: 5 25 125 50 250 1250Модифікатор точності розташовується після модифікатора мінімальної ширини поля (за його наявності), та складається з крапки та цілого числа. У випадку застосування до даних з плаваючою крапкою, для перетворення яких використовуються специфікатори перетворення %f або %e, модифікатор точності визначає кількість десяткових розрядів, які виводяться на екран. Наприклад, %10.5f означає, що ширина поля виводу буде не менша ніж 10 символів, а для десяткових розрядів буде відведено 5 позицій.
Наприклад:
float i = 450.004575;
printf("%10.5f\n", i);
Результат:
450.00458
При застосуванні до рядків модифікатор точності визначає максимальну довжину поля. Наприклад, %10.20s означає, що довжина рядка, що виводиться на екран, складатиме щонайменше 10 та щонайбільше 20 символів.
При застосуванні до цілих типів модифікатор точності визначає мінімальну кількість цифр, які будуть відведені для виведення числа.
Наприклад:
int i = 1735;
printf("%10.5i\n", i);
Результат:
Для специфікаторів типу d, i, o, u та x можна використовувати модифікатори h та l, які дозволяють відображати цілі числа типів short та long відповідно. Наприклад %ld використовується для виведення даних типу long int, а для виведення даних типу short unsigned int – %hu. %Lf або %Le означає виведення даних типу long double.
Функція scanf()зчитує дані з клавіатури. Прототип функції наступний:
int scanf(const char *керуючий_рядок, ...);Керуючий рядок визначає перетворення значень, що зчитуються, під час запису їх у змінні, на які вказують елементи списку аргументів. Основні специфікатори перетворення для функції scanf()подано в таблиці 1.8. Специфікатори формату введення повідомляють функції scanf() тип даних, які зчитуються. Для всіх змінних, які мають отримати значення, повинні бути переданими їх адреси. Адресу змінної в пам'яті повертає унарний оператор &. У разі помилки функція scanf()повертає EOF.
Таблиця 1.8 – Основні специфікатори перетворення для функції scanf()
Код | Формат |
%a | значення з плаваючою крапкою (тільки стандарт С99) |
%c | cимвол |
%d | десяткове ціле число |
%i | ціле число в десятковому, вісімковому, шістнадцятковому форматах |
%e, %f, %g | число з плаваючою крапкою |
%o | вісімкове число |
%s | рядок |
%x | шістнадцяткове число |
%u | десяткове ціле число без знака |
%% | читає знак % |
Наприклад:
unsigned number;
scanf("%u", &number);
Якщо для зчитування рядка було використано функцію scanf() зі специфікатором перетворення %s, символи рядка зчитуються до першого роздільника, яким може бути, наприклад, пробіл або роздільник рядків.
Приклад 1.1.Здійснити зчитування даних з клавіатури, присвоїти їм певні значення та вивести результат на екран.
Блок-схема алгоритму роботи програми(рис.1.10)
Рис. 1.10 | Текст програми #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { int a, b, c; char ch; printf("a = "); scanf("%i", &a); /*зчитування з клавіатури значення а*/ printf("b = "); scanf("%i", &b); /*зчитування з клавіатури значення b*/ c = a + b;/*виконання присвоєння змінній с значення суми змінних а та b*/ printf("c = %i\n", c);/*виведення на екран значення змінної с*/ ch = 'A'; printf("symbol: %c\n", ch); /* виведення на екран значення змінної сh*/ return 0; } |
Результати роботи програми:
а = 34
b = 45
c = 79
symbol: A
Примітка. Використання деяких функцій мови С в середовищі програмування MS Visual Studio викликає виведення попереджень або помилки, оскільки для цього середовища було розроблено інші більш безпечні версії цих функцій. Рядок#define _CRT_SECURE_NO_WARNINGS відключає виведення таких попереджень та надає можливість використовувати функції мови С в цьому середовищі програмування. Проте в середовищі програмування MS Visual Studio краще використовувати вбудовані безпечні функції.
Нижче подано текст програми для попереднього прикладу з використанням безпечних функцій scanf_s() та printf_s():
#include <stdio.h>
int main(void)
{
int a, b, c;
char ch;
printf_s("a = ");
scanf_s("%i", &a); /*зчитування з клавіатури значення а*/
printf_s("b = ");
scanf_s("%i", &b); /*зчитування з клавіатури значення b*/
c = a + b;/*виконання присвоєння змінній с значення суми змінних а та b*/
printf_s("c = %i\n", c);/*виведення на екран значення змінної с*/
ch = 'A';
printf_s("symbol: %c\n", ch);/* виведення на екран значення змінної сh*/
return 0;
}
Надалі в даному методичному посібнику використовуються класичні оператори мови С. З метою безпечного використання функції scanf() в разі зчитування рядка потрібно вказувати ширину для формату %s (наприклад, "%32s" замість "%s"). Це дозволить уникнути переповнення буфера в разі неправильно відформатованих вхідних даних.
Приклад 1.2.Здійснити форматоване виведення результату обчислення виразу res: = (a + b + c)/5,6.
Дата добавления: 2015-09-11; просмотров: 2296;