formatting i o printf
Този урок разглежда употребата и примери за функции като printf, sprintf, scanf, които се използват за форматиране на вход / изход в C ++:
В предишните ни уроци за C ++ видяхме, че можем да изпълняваме операции за вход-изход в C ++, използвайки cin / cout.
Освен да използваме тези конструкции, можем да използваме и библиотеката C. Използвайки C стандартна библиотека за вход и изход (cstdio, еквивалент на C ++ за заглавката stdio.h на език C), ние извършваме I / O операции, използвайки „потоци“, които работят с физически устройства като клавиатури (стандартен вход), принтери, терминали (стандартен изход) ) или други типове файлове, поддържани от операционната система.
=> Проверете тук уроците за задълбочено обучение за C ++.
Потоците не са нищо друго освен абстрактна същност, която се използва за взаимодействие с физически устройства по еднакъв начин. Всички потоци имат сходни характеристики и са независими от физическите медийни устройства.
В следващите теми в този урок ще научим подробно за няколко функции, т.е. printf, sprint и scanf.
Какво ще научите:
- C ++ printf
- C ++ sprintf
- C ++ scanf
- scanf / printf Vs. cin / cout В C ++
- често задавани въпроси
- Заключение
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 | Преобразува неподписано цяло число в десетично представяне. |
1 | % | Отпечатва a%. |
две | ° С | Отпечатва единичен знак. |
3 | с | Отпечатва низ. |
4 | г / и | Преобразува подписано цяло число в десетично представяне. |
5 | или | Преобразува неподписано цяло число в осмично представяне. |
6 | x / X | Преобразува неподписано цяло число в шестнадесетично представяне. |
8 | f / F | Преобразува число с плаваща запетая в десетично представяне. |
9 | и / E | Преобразува число с плаваща запетая в десетична степенна нотация. |
10 | а / А | Преобразува число с плаваща запетая в шестнадесетичен показател. |
единадесет | 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 показват символни, десетични, осмични и шестнадесетични стойности.
C ++ 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 | Съответства на неподписано шестнадесетично цяло число. |
1 | % | Съответства буквално%. |
две | ° С | Съответства на един или няколко знака до ширина. |
3 | с | Съответства на последователност от небели символи до зададена ширина или първо интервал. |
4 | д | Съответства на десетичната. |
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 са функция, използвана за I / O. | cin и cout са поточни обекти. |
Форматиращият низ се използва за форматиране на входа и изхода. | Оператори >> и<< are overloaded and used along with cin and cout respectively. Не се използва низ за формат. |
Ние посочваме типа данни, като използваме държач на място. | Няма нужда да указвате типа данни. |
често задавани въпроси
В # 1) Можете ли да използвате printf в C ++?
Отговор: Да. Printf може да се използва в C ++. За да използваме тази функция в програма на C ++, трябва да включим заглавката в програмата.
В # 2) Кой език използва printf?
Отговор: Printf е стандартната изходна функция на език C. Може да се използва и на език C ++, като включва заглавката в програмата C ++.
В # 3) Какво е% d в програмирането на C?
Отговор: % d стойност във функцията printf се отнася до цяло число.
В # 4) Защо & се използва в Scanf?
Отговор: & оператор се използва за достъп до местоположението в паметта. Стенография е да се предаде указател към променливата, вместо да се подаде изрично.
В # 5) Каква е разликата между printf () и sprintf ()?
Отговор: И двете функции printf () и sprintf () са еднакви, с изключение на една разлика. Докато printf () записва изхода в stdout (стандартен изход), sprintf записва изхода в буфер на символен низ.
В # 6) Спира ли Sprintf null?
Отговор: sprintf връща броя на символите, съхранявани в масив от символни низове, с изключение на нулевия терминиращ знак.
В # 7) Защо sprintf е опасен?
Отговор: Функцията Sprintf не проверява дължината на целевия буфер. Следователно, когато дължината на форматиращия низ е твърде дълга, функцията може да причини препълване на целевия буфер. Това може да доведе до проблеми с нестабилността на приложението и сигурността, като по този начин функцията sprintf стане опасна.
Заключение
В този урок научихме функциите за въвеждане и извеждане на библиотека C - printf, sprintf и scanf, които могат да се използват в C ++, като включим заглавката, което е еквивалентно на заглавката C.
Както вече беше обсъдено, входно-изходните функции използват спецификатори на формат и държачи на места и трябва да посочим типовете данни на променливите, в които данните се четат или записват.
Противно на това, поточните обекти, използвани в C ++ - cin и cout, не използват никакви спецификатори на формат или заместители. Те използват претоварени >> и<< operators to read in and write the data.
=> Вижте Перфектното ръководство за обучение на C ++ тук.