formatting i o printf
Цей підручник обговорює використання та приклади функцій, таких як printf, sprintf, scanf, які використовуються для формування вводу / виводу в C ++:
У наших попередніх підручниках з C ++ ми бачили, що ми можемо виконувати операції вводу-виводу в C ++ за допомогою cin / cout.
Окрім використання цих конструкцій, ми також можемо скористатися бібліотекою C. Використовуючи стандартну бібліотеку вводу-виводу C (cstdio, еквівалент C ++ для заголовка stdio.h мовою C), ми виконуємо операції вводу-виводу, використовуючи “потоки”, які працюють з фізичними пристроями, такими як клавіатури (стандартний вхід), принтери, термінали (стандартний вихід) ) або будь-які інші типи файлів, що підтримуються операційною системою.
=> Ознайомтесь із поглибленими навчальними посібниками для C ++ тут.
Потоки - це не що інше, як абстрактна сутність, яка використовується для однакової взаємодії з фізичними пристроями. Всі потоки мають схожі характеристики і не залежать від фізичних носіїв інформації.
У наступних темах цього підручника ми детально дізнаємося про декілька функцій, тобто printf, sprint та scanf.
Що ви дізнаєтесь:
C ++ printf
Функція printf у C ++ використовується для запису вихідних даних, відформатованих у stdout.
Прототип функції:
int printf (формат const char *,…);
Параметри:
формат => Вказівник на рядок із нульовим закінченням, записаний у потік файлів. Він складається з символів разом із необов’язковим специфікатором формату, який починається з%. Специфікатор формату замінюється відповідними значеннями, що слідують за рядком формату.
… => Інші додаткові аргументи, що визначають дані, що надруковуються в порядку, вказаному у форматі.
Повернене значення:
компанії, що пропонують послуги хмарних обчислень
Успіх => printf повертає кількість повернутих символів.
Помилка => Негативне значення
Опис:
Функція printf визначена в заголовку. Функції printf записують рядок, на який вказує покажчик “format”, у стандартний вихідний файл stdout. Рядок формату може містити специфікатори формату, які потім замінюються змінними, переданими функції printf як додаткові аргументи (після рядка формату).
Специфікатор формату, який використовується у функції printf ()
Загальною формою специфікатора формату є
%(flags)(width)(.precision)(length)specifierНижче наведено опис кожної з частин специфікатора формату:
- знак%: Це провідний знак%
- Прапори: Вони можуть мати такі значення:
- -: Ліворуч виправдовує результат у полі. За замовчуванням право виправдано.
- +: Знак результату, прикріплений до початку значення, включаючи позитивні результати.
- Пробіл: За відсутності знака пробіл приєднується до початку результату.
- #: Вкажіть альтернативну форму перетворення.
- 0: Використовується для цілих чисел і чисел із плаваючою комою. Діють як провідні нулі за відсутності місця.
- Ширина: Вказує мінімальну ширину поля у вигляді * або цілого значення. Це необов’язково.
- Точність: Вказує точність зі знаком '.', За яким слідує * або ціле число, або нічого. Це також необов’язково.
- Довжина: Необов’язковий аргумент, який вказав розмір аргументу.
- Специфікатор: Це специфікатор формату перетворення.
Різні специфікатори формату, які використовуються в C ++, такі:
| Ні | Специфікатор | Опис |
|---|---|---|
| 7 | u | Перетворює ціле число без знака в десяткове подання. |
| один | % | Друкує%. |
| два | c | Друкує один символ. |
| 3 | s | Друкує рядок. |
| 4 | д / і | Перетворює підписане ціле число в десяткове подання. |
| 5 | або | Перетворює ціле число без знака у вісімкове представлення. |
| 6 | x / X | Перетворює ціле число без знака в шістнадцяткове подання. |
| 8 | f / F | Перетворює число з плаваючою комою в десяткове подання. |
| 9 | та / Е | Перетворює число з плаваючою крапкою в десяткове позначення степеня. |
| 10 | a / A | Перетворює число з плаваючою точкою в шістнадцятковий показник. |
| одинадцять | g / G | Перетворює число з плаваючою комою в десятковий або десятковий запис степеня. |
| 12 | п | Кількість символів, записаних до цього часу за допомогою цієї функції. |
| 13 | стор | Покажчик, що вказує на послідовність символів, визначених реалізацією. |
Нижче наведено повний приклад програмування на C ++, який демонструє обговорену вище функцію printf.
Приклад C ++ printf
#include //C++ printf example int main() { char ch = 'A'; float a = 8.0, b = 3.0; double d = 3.142; int x = 20; printf('float division : %.3f / %.3f = %.3f
', a,b,a/b); printf('Double value: %.4f
', d); printf('Setting width %*c
',4,ch); printf('Octal equivalent of %d is %o
',x,x); printf('Hex equivalent of %d is %x
',x,x); return 0; }Вихід:

У вищезазначеній програмі використовуються різні виклики функції printf, і ми зазначаємо, що кожен виклик printf використовує різні специфікатори формату, про які ми говорили вище. Специфікатор формату% .3f позначає плаваюче значення із до 3 знаків після коми. Решта викликів printf відображають символьні, десяткові, вісімкові та шістнадцяткові значення.
С ++ sprintf
Функція Sprintf у C ++ подібна до функції printf, за винятком однієї різниці. Замість того, щоб писати вихідні дані у стандартний вихідний stdout, sprintf записує вихідні дані в буфер рядків символів.
Прототип функції:
int sprintf (буфер char *, формат const char *,…)
Параметри:
буфер => Вказівник на рядок буфера, в який слід записати результат.
Формат => Вказівник на рядок із нульовим закінченням, який записується в потік файлів.
Примітка: Рядок формату, який використовується у функції sprintf, такий самий, як і той, що обговорювався як частина опису функції printf.
… => Інші додаткові аргументи, що визначають дані, що надруковуються в порядку, вказаному у форматі.
Повернене значення:
успіх => Повертає кількість символів, записаних у досить великий буфер, за винятком закінчувального нульового символу.
Помилка => Повертається негативне значення.
Опис:
Функція Sprintf визначена в заголовку. Функція sprintf використовується для запису рядка, вказаного форматом, до буфера рядків. Формат рядка може містити специфікатори формату, що починаються з%, які замінюються значеннями змінних, які передаються функції sprintf () як додаткові аргументи.
Давайте побачимо приклад програми на C ++, яка показує використання функції sprintf.
Приклад sprintf
#include #include using namespace std; int main() { char mybuf(100); int retVal; char name() = 'Software Testing Help'; char topic() = 'C++ tutorials'; retVal = sprintf(mybuf, 'Hi, this is %s and you are reading %s !!', name, topic); cout << mybuf << endl; cout << 'Number of characters written = ' << retVal << endl; return 0; }Вихід:

У наведеному вище прикладі спочатку ми записуємо відформатований рядок у буфер символів mybuf за допомогою функції sprintf. Потім ми відображаємо рядок у stdout за допомогою cout. Нарешті, ми відображаємо кількість символів, записаних у буфер mybuf.
C ++ scanf
Функція scanf у C ++ зчитує вхідні дані зі стандартного вводу stdin.
Прототип функції:
int scanf (формат const char *,…)
Параметри:
формат => Вказівник на рядок із нульовим закінченням, який визначає спосіб читання введення. Цей рядок формату складається із специфікаторів формату.
… => Додаткові аргументи, що вводять дані. Ці додаткові аргументи є послідовними відповідно до специфікатора формату.
Повернене значення:
успіх => Повертає кількість прочитаних символів.
matchingFailure => Повертає нуль, якщо збіг збігу відбувається до призначення першого аргументу, що отримує.
вхід Помилка => Повертає EOF, якщо помилка введення відбувається до призначення першого аргументу, що отримує.
Опис:
Функція Scanf () визначена в заголовку. Ця функція зчитує дані з stdin і зберігає у наданих змінних.
Специфікатор формату, що використовується у функції scanf ()
Загальний формат для рядка формату функції scanf ():
%(*)(width)(length)specifierТаким чином, специфікатор формату має такі частини:
- Непробільний символ: Це символи, за винятком%, які споживають один ідентичний символ із вхідного потоку.
- Пробіл: Усі послідовні пробіли розглядаються як один пробіл. Те саме стосується і послідовностей втечі.
- Специфікація перетворення: Він має такий формат:
- %: Символ, який визначає початок.
- *: Викликається придушення символу, що придушує. Якщо присутній, scanf не призначає результат жодним параметрам прийому. Цей параметр необов’язковий.
- Ширина поля: Необов’язковий параметр (додатне ціле число), який визначає максимальну ширину поля.
- Довжина: Вказує розмір отримання аргументу.
Специфікатор формату перетворення може бути таким:
| Ні | Специфікатор формату | Опис |
|---|---|---|
| 7 | x / X | Відповідає цілому шістнадцятковому числу без знака. |
| один | % | Відповідає буквальному%. |
| два | c | Відповідає одному або декільком символам до ширини. |
| 3 | s | Відповідає послідовності символів, що не є пробілами, до вказаної ширини або першого пробілу. |
| 4 | d | Відповідає десятковій. |
| 5 | i | Відповідає цілому числу. |
| 6 | або | Відповідає беззнаковому восьмеричному цілому числу. |
| 8 | u | Відповідає беззнаковому десятковому цілому числу. |
| 9 | a / A, e / E, f / F, g / G | Відповідає номеру з плаваючою комою. |
| 10 | (встановити) | Відповідає непустої послідовності символів із заданого набору. Якщо перед цим стоїть ^, знаки, яких немає в наборі, збігаються. |
| 12 | п | Повертає кількість прочитаних символів. |
| 13 | стор | Вказівник на послідовність символів реалізації. |
Далі ми реалізуємо зразок програми, щоб продемонструвати використання функції scanf в C ++
Приклад scanf
#include int main () { char str (80), pos_str(80); int i; printf ('Enter your company name: '); scanf ('%79s',str); printf ('Enter your position: '); scanf ('%s',pos_str); printf ('You work at %s as %s.
',str,pos_str); printf ('Enter a hexadecimal number: '); scanf ('%x',&i); printf ('You have entered %#x (%d).
',i,i); return 0; }Вихід:

У наведеній вище програмі ми читаємо два вхідні рядки та шістнадцяткове число. Потім ми поєднуємо два рядки і відображаємо результуючу рядок. Число перетворюється в десяткове і відображається.
scanf / printf Vs. cin / cout У C ++
| scanf / printf | cin / вартість |
|---|---|
| Стандартний ввід-вихід мовою C. | Стандартне введення-виведення мовою C ++. |
| Визначено в 'stdio.h'. | Визначається в 'iostream'. |
| scanf та printf - це функція, яка використовується для вводу-виводу. | cin і cout - це потокові об'єкти. |
| Рядок форматування використовується для форматування вхідних та вихідних даних. | Оператори >> та<< are overloaded and used along with cin and cout respectively. Не використовується рядок формату. |
| Ми вказуємо тип даних, використовуючи підставки. | Не потрібно вказувати тип даних. |
Часті запитання
Q # 1) Чи можете ви використовувати printf у C ++?
Відповідь: Так. Printf можна використовувати в C ++. Щоб використовувати цю функцію в програмі на C ++, нам потрібно включити в програму заголовок.
Q # 2) Яка мова використовує printf?
Відповідь: Printf - це стандартна функція виводу мовою C. Він також може використовуватися мовою С ++, включаючи заголовок до програми С ++.
Q # 3) Що таке% d у програмуванні на C?
Відповідь: Значення% d у функції printf відноситься до цілочисельного значення.
Q # 4) Чому & використовується в Scanf?
Відповідь: & використовується для доступу до місця пам'яті. Це скорочено передавати покажчик на змінну, а не передавати його явно.
Q # 5) Яка різниця між printf () та sprintf ()?
Відповідь: Обидві функції printf () та sprintf () однакові, за винятком однієї різниці. Поки printf () записує вихідні дані у stdout (стандартний вихід), sprintf записує вихідні дані в буфер рядків символів.
Q # 6) Чи припиняє Sprintf null?
Відповідь: sprintf повертає кількість символів, що зберігаються в масиві рядків символів, за винятком нульового символу закінчення.
Q # 7) Чому sprintf небезпечний?
Відповідь: Функція Sprintf не перевіряє довжину буфера призначення. Отже, коли довжина рядка формату занадто довга, функція може спричинити переповнення буфера призначення. Це може призвести до нестабільності програми та проблем із безпекою, тим самим роблячи функцію sprintf небезпечною.
Висновок
У цьому посібнику ми вивчили функції введення-виведення бібліотеки C - printf, sprintf та scanf, які можна використовувати в C ++, включивши заголовок, що еквівалентно заголовку C.
Як уже обговорювалося, функції введення-виведення використовують специфікатори формату та власники місць, і нам потрібно вказати типи даних змінних, в які дані читаються або записуються.
На відміну від цього, потокові об'єкти, що використовуються в C ++ - cin і cout, не використовують ніяких специфікаторів формату або заповнювачів. Вони використовують перевантажені >> і<< operators to read in and write the data.
=> Ознайомтесь з Ідеальним навчальним посібником для C ++ тут.