formatting i o printf
Овај водич говори о употреби и примерима функција попут принтф, спринтф, сцанф који се користе за обликовање улаза / излаза у Ц ++:
У нашим претходним водичима за Ц ++ видели смо да можемо извршити операције уноса-излаза у Ц ++-у користећи цин / цоут.
Поред употребе ових конструкција, можемо користити и библиотеку Ц. Користећи Ц стандардну библиотеку улаза и излаза (цстдио, Ц ++ еквивалент за заглавље стдио.х на језику Ц), изводимо И / О операције користећи „токове“ који раде са физичким уређајима попут тастатуре (стандардни улаз), штампача, терминала (стандардни излаз) ) или било које друге врсте датотека које оперативни систем подржава.
=> Проверите овде детаљне туторијале за обуку за Ц ++.
Потоци нису ништа друго до апстрактни ентитет који се користи за уједначену интеракцију са физичким уређајима. Сви токови имају сличне карактеристике и независни су од физичких медијских уређаја.
У следећим темама у овом упутству детаљно ћемо научити неколико функција, тј. Принтф, спринт и сцанф.
Шта ћете научити:
- Ц ++ принтф
- Ц ++ спринтф
- Ц ++ сцанф
- сцанф / принтф вс. цин / цоут У Ц ++
- Често постављана питања
- Закључак
Ц ++ принтф
Функција принтф у језику Ц ++ користи се за писање резултата који су форматирани у стдоут.
Прототип функције:
инт принтф (формат цонст цхар *,…);
Параметри:
формат => Показивач на низ који се завршава нулом записан у ток датотеке. Састоји се од знакова, заједно са опционим спецификатором формата који почиње са%. Спецификатор формата замењен је одговарајућим вредностима које следе низ формата.
… => Остали додатни аргументи који одређују податке за штампање у редоследу наведеном формату.
Повратна вредност:
како постати књига вођа
Успех => принтф враћа број враћених знакова.
Неуспех => Негативна вредност
Опис:
Функција принтф је дефинисана у заглављу. Функције принтф записују низ на који показује показивач “формат” на стандардни излазни стдоут. Низ формата може садржати спецификаторе формата који се затим замењују променљивим прослеђеним функцији принтф као додатни аргументи (после низа формата).
Спецификатор формата који се користи у функцији принтф ()
Општи облик спецификатора формата је
%(flags)(width)(.precision)(length)specifier
Доље је дат опис сваког од делова спецификатора формата:
- знак%: Ово је водећи знак%
- Заставе: Могу имати следеће вредности:
- -: Лево оправдава резултат у пољу. Подразумевано, оправдано десно.
- +: Знак резултата везан за почетак вредности, укључујући позитивне резултате.
- Размак: У недостатку знака, размак је везан за почетак резултата.
- #: Наведите алтернативни облик конверзије.
- 0: Користи се за целобројне бројеве и бројеве са покретном зарезом. Понашајте се као водеће нуле у одсуству простора.
- Ширина: Одређује минималну ширину поља у облику * или целобројне вредности. Ово није обавезно.
- Прецизност: Наводи прецизност са „.“ Иза којег слиједи * или цијели број или ништа. Ово је такође необавезно.
- Дужина: Опционални аргумент који је одредио величину аргумента.
- Спецификатор: Ово је спецификатор формата конверзије.
Разни спецификатори формата који се користе у Ц ++ су следећи:
Немој | Спецификатор | Опис |
---|---|---|
7 | у | Претвара непотписани цели број у децимални приказ. |
1 | % | Штампа а%. |
два | ц | Штампа један знак. |
3 | с | Штампа низ. |
4 | д / и | Претвара потписани цели број у децимални приказ. |
5 | или | Претвара цео број без потписа у осмински приказ. |
6 | к / Кс | Претвара цео број без потписа у хексадецимални приказ. |
8 | ф / Ф | Претвара број са покретном зарезом у децимални приказ. |
9 | и / Е. | Претвара број са покретном зарезом у децимални запис експонента. |
10 | а / А | Претвара број са покретном зарезом у хексадецимални експонент. |
Једанаест | г / Г | Претвара број с помичном зарезом у децимални или децимални запис експонента. |
12 | н | Број знакова до сада написаних овим позивом функције. |
13 | стр | Показивач који показује на секвенцу дефинисаних имплементацијом. |
Доље је дат комплетан пример програмирања на Ц ++ који демонстрира претходно разматрану функцију принтф.
Пример примене Ц ++ принтф
#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; }
Излаз:
Горњи програм користи различите позиве функције принтф и напомињемо да сваки позив принтф-у користи различите спецификаторе формата о којима смо раније говорили. Спецификатор формата% .3ф означава пловећу вредност са до 3 децимале. Остатак принтф позива приказује знаковне, децималне, окталне и хексадецималне вредности.
Ц ++ спринтф
Спринтф функција у Ц ++-у слична функцији принтф, осим са једном разликом. Уместо да записује излаз у стандардни излазни стдоут, спринтф записује излаз у бафер знаковних низова.
Прототип функције:
инт спринтф (цхар * буффер, цонст цхар * формат,…)
Параметри:
бафер => Показивач на ме успремник низа у који се записује резултат.
Формат => Показивач на низ који се завршава нулом и записује се у ток датотека.
Напомена: Низ формата који се користи у функцији спринтф исти је оном који је разматран као део описа функције принтф.
… => Остали додатни аргументи који одређују податке за штампање у редоследу наведеном формату.
Повратна вредност:
успех => Враћа број знакова записаних у довољно велики међуспремник, искључујући крајњи нулл знак.
Неуспех => Врати се негативна вредност.
Опис:
Спринтф функција је дефинисана у заглављу. Функција спринтф се користи за писање низа на који је формат указан у бафер низа. Формат низа може садржати спецификаторе формата који почињу са% који се замењују вредностима променљивих које се прослеђују функцији спринтф () као додатни аргументи.
Погледајмо пример програма Ц ++ који приказује употребу функције спринтф.
пример спринтф
#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; }
Излаз:
У горњем примеру, прво записујемо форматирани низ у бафер знакова мибуф користећи функцију спринтф. Затим приказујемо низ у стдоут помоћу цоут-а. На крају, приказујемо број знакова записаних у бафер мибуф.
Ц ++ сцанф
Функција сцанф у Ц ++ чита улазне податке са стандардног улазног стдина.
Прототип функције:
инт сцанф (формат цонст цхар *,…)
Параметри:
формат => Показивач на низ који се завршава нулом и дефинише начин читања уноса. Овај низ формата састоји се од спецификатора формата.
… => Додатни аргументи који примају унос података. Ови додатни аргументи су у низу према спецификатору формата.
Повратна вредност:
успех => Приказује број прочитаних знакова.
матцхингФаилуре => Враћа нулу ако се подударање догоди пре него што се додели први аргумент који прима.
неуспех уноса => Враћа ЕОФ ако дође до грешке у улазу пре него што се додели први аргумент који прима.
Опис:
Функција Сцанф () је дефинисана у заглављу. Ова функција чита податке са стдина и чува их у наведеним променљивим.
Спецификатор формата који се користи у функцији сцанф ()
Општи формат за стринг формата функције сцанф () је:
%(*)(width)(length)specifier
Стога спецификатор формата има следеће делове:
- Знак који није размак: То су знакови осим% који троше један идентичан знак из улазног тока.
- Размак: Сви узастопни размаци се сматрају једним размаком. Исто важи и за секвенце бекства.
- Спецификација конверзије: Има следећи формат:
- %: Карактер који одређује почетак.
- *: Звани задатак који сузбија знак. Ако је присутан, сцанф не додељује резултат ниједном параметру пријема. Овај параметар није обавезан.
- Ширина поља: Изборни параметар (позитиван цео број) који наводи максималну ширину поља.
- Дужина: Одређује величину пријема аргумента.
Спецификатор претворбеног формата може бити сљедећи:
Немој | Спецификатор формата | Опис |
---|---|---|
7 | к / Кс | Подудара се са непотписаним хексадецималним целим бројем. |
1 | % | Поклапа се дословно%. |
два | ц | Подудара се са једним или више знакова до ширине. |
3 | с | Подудара се са сликом који није размак до специфициране ширине или првог размака. |
4 | д | Подудара се са децималом. |
5 | и | Поклапа цео број. |
6 | или | Поклапа се са непотписаним осминским целим бројем. |
8 | у | Подудара се са непотписаним децималним целим бројем. |
9 | а / а, е / е, ф / ж, г / г | Подудара се са бројем са покретном зарезом. |
10 | (комплет) | Подудара се са празним низом знакова из датог скупа. Ако им претходи ^, онда се подударају знакови који нису у скупу. |
12 | н | Приказује број до сада прочитаних знакова. |
13 | стр | Показивач на секвенцу знакова специфичну за имплементацију. |
Даље, применићемо пример програма за демонстрирање употребе функције сцанф у Ц ++
Пример сцанф
#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; }
Излаз:
У горњем програму прочитали смо две улазне низове и хексадецимални број. Затим комбинујемо два низа и приказујемо резултујући низ. Број се претвара у децимални и приказује.
сцанф / принтф вс. цин / цоут У Ц ++
сцанф / принтф | цин / трошак |
---|---|
Стандардни улаз-излаз на Ц језику. | Стандардни улаз-излаз на језику Ц ++. |
Дефинисано у 'стдио.х'. | Дефинисано у „иостреам“. |
сцанф и принтф су функција која се користи за И / О. | цин и цоут су објекти у току. |
Низ форматирања користи се за форматирање улаза и излаза. | Оператери >> и<< are overloaded and used along with cin and cout respectively. Не користи се низ формата. |
Тип података одредујемо помоћу држача места. | Није потребно навести тип података. |
Често постављана питања
П # 1) Можете ли користити принтф у Ц ++?
Одговор: Да. Принтф се може користити у језику Ц ++. Да бисмо користили ову функцију у програму Ц ++, потребно је да укључимо заглавље у програм.
П # 2) Који језик користи принтф?
Одговор: Принтф је стандардна функција излаза на језику Ц. Такође се може користити на језику Ц ++ укључивањем заглавља у програм Ц ++.
П # 3) Шта је% д у Ц програмирању?
Одговор: Вредност% д у функцији принтф односи се на целобројну вредност.
П # 4) Зашто се & користи у Сцанф-у?
Одговор: & оператор се користи за приступ меморијској локацији. Стенограф је проследити показивач на променљиву уместо да га проследите експлицитно.
П # 5) Која је разлика између принтф () и спринтф ()?
Одговор: И функције принтф () и спринтф () су исте, осим једне разлике. Док принтф () записује излаз у стдоут (стандардни излаз), спринтф записује излаз у међуспремник знаковних низова.
П # 6) Да ли Спринтф нулл престаје?
Одговор: спринтф враћа број знакова сачуваних у низу знаковних низова, изузев нултог завршног знака.
П # 7) Зашто спринтф није сигуран?
Одговор: Спринтф функција не проверава дужину одредишног бафера. Стога, када је дужина низа формата предугачка, функција може проузроковати преливање одредишног бафера. То може довести до нестабилности апликације и сигурносних проблема, чиме спринтф функција постаје небезбедна.
Закључак
У овом упутству смо научили функције улаза-излаза из библиотеке Ц - принтф, спринтф и сцанф које се могу користити у Ц ++-у укључивањем заглавља које је еквивалентно заглављу Ц.
Као што је већ речено, улазно-излазне функције користе спецификаторе формата и држаче места и морамо да одредимо типове података променљивих у којима се подаци читају или записују.
Супротно томе, објекти за стримовање који се користе у Ц ++ - цин и цоут не користе никакве спецификаторе формата или чуваре места. Користе преоптерећени >> и<< operators to read in and write the data.
=> Овде погледајте савршен водич за обуку за Ц ++.