formatting i o printf
Tento výukový program pojednáva o použití a príkladoch funkcií ako printf, sprintf, scanf, ktoré sa používajú na formovanie vstupu / výstupu v C ++:
V našich predchádzajúcich tutoriáloch pre C ++ sme videli, že môžeme vykonávať vstupno-výstupné operácie v C ++ pomocou cin / cout.
Okrem použitia týchto konštruktov môžeme tiež použiť knižnicu C. Pomocou štandardnej vstupnej a výstupnej knižnice C (cstdio, ekvivalent C ++ pre hlavičku stdio.h v jazyku C) vykonávame vstupno-výstupné operácie pomocou „prúdov“, ktoré fungujú s fyzickými zariadeniami, ako sú klávesnice (štandardný vstup), tlačiarne, terminály (štandardný výstup) ) alebo akékoľvek iné typy súborov podporované operačným systémom.
=> Tu si pozrite podrobné výukové návody C ++.
Prúdy nie sú ničím iným ako abstraktnou entitou, ktorá sa používa na jednotnú interakciu s fyzickými zariadeniami. Všetky streamy majú podobné vlastnosti a sú nezávislé od zariadení fyzických médií.
V našich ďalších témach v tomto výučbe sa podrobne naučíme niekoľko funkcií, napríklad printf, sprint a scanf.
Čo sa dozviete:
- C ++ printf
- C ++ šprint
- Skenovanie C ++
- scanf / printf vs. cin / cout V C ++
- často kladené otázky
- Záver
C ++ printf
Funkcia printf v C ++ sa používa na zápis výstupu, ktorý je naformátovaný na štandardný výstup.
Funkčný prototyp:
int printf (formát const char *, ...);
Parametre:
formát => Ukazovateľ na reťazec zakončený nulou, zapísaný do toku súborov. Skladá sa zo znakov a voliteľného špecifikátora formátu, ktorý začína%. Špecifikátor formátu sa nahradí príslušnými hodnotami, ktoré nasledujú za reťazcom formátu.
… => Ďalšie ďalšie argumenty, ktoré určujú údaje, ktoré sa majú vytlačiť v poradí, v akom je uvedený formát.
Návratová hodnota:
najlepší nástroj na správu testovacích prípadov pre džiru
Úspech => printf vráti počet vrátených znakov.
Zlyhanie => Záporná hodnota
Popis:
Funkcia printf je definovaná v hlavičke. Funkcie printf zapíšu reťazec, na ktorý ukazuje ukazovateľ „formátu“, na štandardný výstupný výstup. Reťazec formátu môže obsahovať špecifikátory formátu, ktoré sú potom nahradené premennými odovzdanými funkcii printf ako ďalšie argumenty (po reťazci formátu).
Špecifikátor formátu použitý vo funkcii printf ()
Všeobecná forma špecifikátora formátu je
%[flags][width][.precision][length]specifier
Nižšie je uvedený popis každej z častí špecifikátora formátu:
- znak%: Toto je popredný znak%
- Vlajky: Môžu mať nasledujúce hodnoty:
- -: Vľavo zarovná výsledok v rámci poľa. V predvolenom nastavení je zarovnané vpravo.
- +: Znamienko výsledku pripojené k začiatku hodnoty vrátane pozitívnych výsledkov.
- Medzera: Ak chýba značka, na začiatok výsledku sa pripojí medzera.
- #: Zadajte alternatívnu formu konverzie.
- 0: Používa sa na celé číslo a čísla s pohyblivou rádovou čiarkou. Pri nedostatku miesta konajte ako úvodné nuly.
- Šírka: Určuje minimálnu šírku poľa vo forme * alebo celočíselnej hodnoty. Toto je voliteľné.
- Presnosť: Určuje presnosť pomocou znaku „.“, Za ktorým nasleduje znak * alebo celé číslo alebo nič. Toto je tiež voliteľné.
- Dĺžka: Nepovinný argument, ktorý určoval veľkosť argumentu.
- Špecifikátor: Toto je špecifikátor formátu konverzie.
Rôzne špecifikátory formátu používané v C ++ sú nasledujúce:
Nie | Špecifikátor | Popis |
---|---|---|
7 | u | Skonvertuje celé číslo bez znamienka na desatinné miesto. |
1 | % | Vytlačí%. |
dva | c | Vytlačí jeden znak. |
3 | s | Vytlačí reťazec. |
4 | d / i | Prevedie celé číslo so znamienkom na desatinné miesto. |
5 | alebo | Skonvertuje celé číslo bez znamienka na osmičkovú reprezentáciu. |
6 | x / X | Skonvertuje celé číslo bez znamienka na hexadecimálne vyjadrenie. |
8 | f / F | Prevedie číslo s pohyblivou rádovou čiarkou na desatinné miesto. |
9 | a / E. | Skonvertuje číslo s pohyblivou desatinnou čiarkou na desatinný zápis exponentu. |
10 | a / A | Prevedie číslo s pohyblivou rádovou čiarkou na hexadecimálny exponent. |
jedenásť | g / G | Skonvertuje číslo s pohyblivou desatinnou čiarkou na desatinný alebo desatinný zápis exponentu. |
12 | n | Počet znakov doteraz napísaných týmto volaním funkcie. |
13 | p | Ukazovateľ ukazujúci na postupnosť znakov definovanú implementáciou. |
Nižšie je uvedený úplný príklad programovania v C ++, ktorý demonštruje vyššie uvedenú funkciu printf.
C ++ printf Príklad
#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; }
Výkon:
Vyššie uvedený program používa rôzne volania funkcie printf a všimneme si, že každé volanie printf používa rôzne špecifikátory formátu, o ktorých sme hovorili vyššie. Špecifikátor formátu% .3f označuje pohyblivú hodnotu až s 3 desatinnými miestami. Zvyšok hovorov printf zobrazuje hodnoty znaku, desatinné číslo, osmičkové a hexadecimálne číslo.
C ++ šprint
Funkcia Sprintf v C ++ je podobná funkcii printf, až na jeden rozdiel. Namiesto zápisu výstupu na štandardný výstupný výstup, sprintf zapíše výstup do vyrovnávacej pamäte reťazca znakov.
Funkčný prototyp:
int sprintf (char * buffer, const char * formát, ...)
Parametre:
vyrovnávacia pamäť => Ukazovateľ na reťazcovú vyrovnávaciu pamäť, do ktorej sa má zapísať výsledok.
Formát => Ukazovateľ na reťazec zakončený nulou, ktorý sa zapisuje do toku súborov.
Poznámka: Formátovací reťazec použitý vo funkcii sprintf je rovnaký ako reťazec diskutovaný ako súčasť popisu funkcie printf.
… => Ďalšie ďalšie argumenty, ktoré určujú údaje, ktoré sa majú vytlačiť v poradí, v akom je uvedený formát.
Návratová hodnota:
úspech => Vráti počet znakov zapísaných do dostatočne veľkej medzipamäte s výnimkou ukončovacieho nulového znaku.
Zlyhanie => Záporná hodnota sa vráti.
Popis:
Funkcia Sprintf je definovaná v hlavičke. Funkcia sprintf sa používa na zápis reťazca nasmerovaného formátom do vyrovnávacej pamäte reťazca. Formát reťazca môže obsahovať špecifikátory formátu začínajúce na%, ktoré sú nahradené hodnotami premenných, ktoré sú odovzdané funkcii sprintf () ako ďalšie argumenty.
Pozrime sa na ukážkový program C ++, ktorý ukazuje použitie funkcie sprintf.
sprintf Príklad
#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; }
Výkon:
V príklade vyššie najskôr napíšeme naformátovaný reťazec do vyrovnávacej pamäte znakov mybuf pomocou funkcie sprintf. Potom pomocou cout zobrazíme reťazec na štandardný výstup. Na záver zobrazíme počet znakov zapísaných do vyrovnávacej pamäte mybuf.
Skenovanie C ++
Funkcia scanf v C ++ načíta vstupné údaje zo štandardného vstupného vstupu.
Funkčný prototyp:
int scanf (formát const char *, ...)
Parametre:
formát => Ukazovateľ na reťazec zakončený nulou, ktorý definuje, ako sa má čítať vstup. Tento reťazec formátu pozostáva zo špecifikátorov formátu.
… => Ďalšie argumenty prijímajúce vstup údajov. Tieto ďalšie argumenty sú v poradí podľa špecifikátora formátu.
Návratová hodnota:
úspech => Vráti počet načítaných znakov.
matchingFailure => Vráti nulu, ak dôjde k zlyhaniu párovania pred priradením prvého prijímacieho argumentu.
zlyhanie vstupu => Vráti EOF, ak dôjde k zlyhaniu vstupu pred priradením prvého prijímacieho argumentu.
Popis:
Funkcia Scanf () je definovaná v hlavičke. Táto funkcia načíta dáta zo štandardného vstupu a uloží ich do poskytnutých premenných.
Špecifikátor formátu použitý vo funkcii scanf ()
Všeobecný formát reťazca formátu funkcie scanf () je:
%[*][width][length]specifier
Špecifikátor formátu má teda nasledujúce časti:
- Znak bez medzier: To sú znaky okrem%, ktoré spotrebúvajú jeden identický znak zo vstupného toku.
- Znak medzery: Všetky nasledujúce znaky medzery sa považujú za jeden znak medzery. To isté platí aj pre únikové sekvencie.
- Špecifikácia prevodu: Má nasledujúci formát:
- %: Znak, ktorý určuje začiatok.
- *: Volaný znak potlačujúci priradenie. Ak je prítomný, scanf nepriradí výsledok žiadnym prijímacím parametrom. Tento parameter je voliteľný.
- Šírka poľa: Voliteľný parameter (kladné celé číslo), ktorý určuje maximálnu šírku poľa.
- Dĺžka: Určuje veľkosť prijatia argumentu.
Špecifikátor formátu konverzie môže byť nasledovný:
Nie | Špecifikátor formátu | Popis |
---|---|---|
7 | x / X | Zhoduje sa so šestnástkovým celým číslom bez znamienka. |
1 | % | Zhoduje sa doslova s%. |
dva | c | Zhoda jedného alebo viacerých znakov do šírky. |
3 | s | Zhoduje sa s postupnosťou znaku, ktorý neobsahuje medzery, do zadanej šírky alebo do prvého medzery. |
4 | d | Zhody desatinné. |
5 | i | Zhoduje sa s celým číslom. |
6 | alebo | Zhoduje sa s nepodpísaným osmičkovým číslom. |
8 | u | Zhoduje sa s desatinným celým číslom bez znamienka. |
9 | a / A, e / E, f / F, g / G | Zhoduje sa s plávajúcou desatinnou čiarkou. |
10 | [sada] | Zhoduje sa s neprázdnou sekvenciou znakov z danej sady. Ak predchádza ^, potom sa zhodujú znaky, ktoré nie sú v množine. |
12 | n | Vráti počet doteraz prečítaných znakov. |
13 | p | Ukazovateľ na postupnosť znakov špecifickú pre implementáciu. |
Ďalej implementujeme ukážkový program na demonštráciu použitia funkcie scanf v C ++
scanf Príklad
#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; }
Výkon:
Vo vyššie uvedenom programe sme načítali dva vstupné reťazce a hexadecimálne číslo. Potom spojíme dva reťazce a zobrazíme výsledný reťazec. Číslo sa prevedie na desatinné miesto a zobrazí sa.
scanf / printf vs. cin / cout V C ++
scanf / printf | cin / náklady |
---|---|
Štandardný vstup-výstup v jazyku C. | Štandardný vstup-výstup v jazyku C ++. |
Definované v 'stdio.h'. | Definované v „prúde“. |
scanf a printf sú funkcie používané pre I / O. | cin a cout sú objekty prúdu. |
Formátovací reťazec sa používa na formátovanie vstupu a výstupu. | Prevádzkovatelia >> a<< are overloaded and used along with cin and cout respectively. Nie je použitý žiadny formátovací reťazec. |
Typ údajov určujeme pomocou zástupcu. | Nie je potrebné špecifikovať dátový typ. |
často kladené otázky
Otázka č. 1) Môžete použiť printf v C ++?
Odpoveď: Áno. Printf je možné použiť v jazyku C ++. Ak chcete túto funkciu použiť v programe C ++, musíme do programu zahrnúť hlavičku.
Otázka 2) Aký jazyk používa printf?
Odpoveď: Printf je štandardná výstupná funkcia v jazyku C. Môže sa tiež použiť v jazyku C ++ zahrnutím hlavičky do programu C ++.
Otázka č. 3) Čo je% dv programovaní v C?
Odpoveď: Hodnota% d vo funkcii printf predstavuje celočíselnú hodnotu.
Otázka č. 4) Prečo a je používaný v Scanf?
Odpoveď: Operátor & sa používa na prístup k umiestneniu v pamäti. Je skratkou odovzdať ukazovateľ do premennej namiesto jej explicitného odovzdania.
Otázka č. 5) Aký je rozdiel medzi printf () a sprintf ()?
Odpoveď: Funkcie printf () a sprintf () sú rovnaké až na jeden rozdiel. Zatiaľ čo printf () zapisuje výstup na štandardný výstup (štandardný výstup), sprintf zapisuje výstup do vyrovnávacej pamäte reťazca znakov.
Otázka č. 6) Končí Sprintf null?
Odpoveď: sprintf vráti počet znakov uložených v poli reťazca znakov okrem nulového ukončovacieho znaku.
Otázka č. 7) Prečo je sprintf nebezpečný?
Odpoveď: Funkcia Sprintf nekontroluje dĺžku cieľového bufferu. Ak je teda formátovací reťazec príliš dlhý, funkcia by mohla spôsobiť pretečenie cieľovej medzipamäte. To môže viesť k nestabilite aplikácie a problémom so zabezpečením, čím sa funkcia sprintf stane nebezpečnou.
Záver
V tomto tutoriáli sme sa naučili vstupno-výstupné funkcie knižnice C - printf, sprintf a scanf, ktoré je možné použiť v C ++, a to zahrnutím hlavičky, ktorá je ekvivalentom pre hlavičku C.
Ako už bolo uvedené, vstupno-výstupné funkcie používajú špecifikátory formátu a zástupné znaky a musíme špecifikovať dátové typy premenných, do ktorých sa dáta čítajú alebo zapisujú.
Naopak, streamované objekty použité v C ++ - cin a cout nepoužívajú žiadne špecifikátory formátu ani zástupné symboly. Používajú preťažené >> a<< operators to read in and write the data.
=> Tu si pozrite perfektného školiaceho sprievodcu jazykom C ++.