formatting i o printf
Tento kurz pojednává o použití a příkladech funkcí jako printf, sprintf, scanf, které se používají pro formátování vstupu / výstupu v C ++:
V našich předchozích výukových programech C ++ jsme viděli, že můžeme provádět operace vstupu a výstupu v C ++ pomocí cin / cout.
Kromě použití těchto konstruktů můžeme také využít knihovnu C. Pomocí standardní knihovny C Standard Input and Output Library (cstdio, ekvivalent C ++ pro hlavičku stdio.h v jazyce C) provádíme I / O operace pomocí „streamů“, které fungují s fyzickými zařízeními, jako jsou klávesnice (standardní vstup), tiskárny, terminály (standardní výstup) ) nebo jiné typy souborů podporované operačním systémem.
=> Podívejte se na výukové návody do hloubky C ++ zde.
Proudy nejsou nic jiného než abstraktní entita, která se používá k interakci s fyzickými zařízeními jednotným způsobem. Všechny streamy mají podobné vlastnosti a jsou nezávislé na zařízeních fyzických médií.
V našich dalších tématech v tomto kurzu se podrobně seznámíme s několika funkcemi, tj. Printf, sprint a scanf.
Co se naučíte:
- C ++ printf
- C ++ sprint
- C ++ skenování
- scanf / printf vs. cin / cout V C ++
- Často kladené otázky
- Závěr
C ++ printf
Funkce printf v C ++ se používá k zápisu výstupu, který je formátován na standardní výstup.
Funkční prototyp:
int printf (formát const char *,…);
Parametry:
formát => Ukazatel na řetězec zakončený hodnotou null zapsaný do datového proudu souboru. Skládá se ze znaků a volitelného specifikátoru formátu, který začíná%. Specifikátor formátu je nahrazen příslušnými hodnotami, které následují za formátovacím řetězcem.
… => Další další argumenty, které určují data, která se mají vytisknout v pořadí, ve kterém je uveden formát.
Návratová hodnota:
java web services rozhovor otázky a odpovědi pro zkušené
Úspěch => printf vrátí počet vrácených znaků.
Selhání => Záporná hodnota
Popis:
Funkce printf je definována v záhlaví. Funkce printf zapisují řetězec, na který ukazuje ukazatel „formát“, na standardní výstupní výstup. Řetězec formátu může obsahovat specifikátory formátu, které jsou poté nahrazeny proměnnými předanými funkci printf jako další argumenty (po řetězci formátu).
Specifikátor formátu použitý ve funkci printf ()
Obecná forma specifikátoru formátu je
%(flags)(width)(.precision)(length)specifier
Níže je uveden popis každé z částí specifikátoru formátu:
- % podepsat: Toto je přední znak%
- Vlajky: Mohou mít následující hodnoty:
- -: Left zarovná výsledek v poli. Ve výchozím nastavení je zarovnáno vpravo.
- +: Znaménko výsledku připojené k začátku hodnoty, včetně pozitivních výsledků.
- Mezera: Při absenci znaménka se na začátek výsledku připojí mezera.
- #: Určete alternativní formu převodu.
- 0: Používá se pro celá čísla a čísla s plovoucí desetinnou čárkou. Při nedostatku prostoru se chovat jako úvodní nuly.
- Šířka: Určuje minimální šířku pole ve formě * nebo celočíselné hodnoty. Toto je volitelné.
- Přesnost: Určuje přesnost pomocí znaku „.“, Za nímž následuje * nebo celé číslo nebo nic. To je také volitelné.
- Délka: Volitelný argument, který určoval velikost argumentu.
- Specifikátor: Toto je specifikátor formátu převodu.
Různé specifikátory formátu používané v C ++ jsou následující:
Ne | Specifikátor | Popis |
---|---|---|
7 | u | Převede celé číslo bez znaménka na desítkové vyjádření. |
jeden | % | Vytiskne%. |
dva | C | Vytiskne jeden znak. |
3 | s | Vytiskne řetězec. |
4 | d / i | Převede celé číslo se znaménkem na desítkové vyjádření. |
5 | nebo | Převede celé číslo bez znaménka na osmičkovou reprezentaci. |
6 | x / X | Převede celé číslo bez znaménka na šestnáctkové vyjádření. |
8 | f / F | Převede číslo s plovoucí desetinnou čárkou na desítkové vyjádření. |
9 | a / E. | Převede číslo s plovoucí desetinnou čárkou na desítkovou notaci exponentu. |
10 | a / A | Převede číslo s plovoucí desetinnou čárkou na hexadecimální exponent. |
jedenáct | g / G | Převede číslo s plovoucí desetinnou čárkou na desítkovou nebo desítkovou notaci. |
12 | n | Počet znaků dosud napsaných tímto voláním funkce. |
13 | str | Ukazatel ukazující na sekvenci znaků definovanou implementací. |
Níže je uveden kompletní příklad programování v C ++, který demonstruje výše popsanou funkci printf.
Příklad 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; }
Výstup:
Výše uvedený program používá různá volání funkce printf a poznamenáváme, že každé volání printf používá různé specifikátory formátu, o kterých jsme diskutovali výše. Specifikátor formátu% .3f označuje plovoucí hodnotu až na 3 desetinná místa. Zbytek volání printf zobrazuje hodnoty znaku, desítkové, osmičkové a hexadecimální.
C ++ sprint
Funkce Sprintf v C ++ podobná funkci printf kromě jednoho rozdílu. Místo zápisu výstupu na standardní výstupní výstup, sprintf zapíše výstup do vyrovnávací paměti znakového řetězce.
Funkční prototyp:
int sprintf (char * buffer, const char * formát,…)
Parametry:
vyrovnávací paměť => Ukazatel na řetězcovou vyrovnávací paměť, do které se má zapsat výsledek.
Formát => Ukazatel na řetězec zakončený hodnotou null, který je zapsán do datového proudu souboru.
Poznámka: Řetězec formátu použitý ve funkci sprintf je stejný jako řetězec popsaný jako součást popisu funkce printf.
… => Další další argumenty, které určují data, která se mají vytisknout v pořadí, ve kterém je uveden formát.
Návratová hodnota:
úspěch => Vrátí počet znaků zapsaných do dostatečně velké vyrovnávací paměti s výjimkou ukončovacího nulového znaku.
Selhání => Záporná hodnota je vrácena.
Popis:
Funkce Sprintf je definována v záhlaví. Funkce sprintf se používá k zápisu řetězce namířeného formátem do vyrovnávací paměti řetězce. Formát řetězce může obsahovat specifikátory formátu začínající na%, které jsou nahrazeny hodnotami proměnných, které jsou předány funkci sprintf () jako další argumenty.
Podívejme se na ukázkový program C ++, který ukazuje použití funkce sprintf.
sprintf Pří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ýstup:
Ve výše uvedeném příkladu nejprve napíšeme formátovaný řetězec do vyrovnávací paměti znaků mybuf pomocí funkce sprintf. Poté zobrazíme řetězec na standardní výstup pomocí cout. Nakonec zobrazíme počet znaků zapsaných do vyrovnávací paměti mybuf.
C ++ skenování
Funkce scanf v C ++ čte vstupní data ze standardního standardního vstupu.
Funkční prototyp:
int scanf (formát const char *,…)
Parametry:
formát => Ukazatel na řetězec zakončený hodnotou null, který definuje, jak číst vstup. Tento řetězec formátu se skládá ze specifikátorů formátu.
… => Další argumenty přijímající vstup dat. Tyto další argumenty jsou v pořadí podle specifikátoru formátu.
Návratová hodnota:
úspěch => Vrátí počet načtených znaků.
matchingFailure => Vrátí nulu, pokud dojde k selhání párování před přiřazením prvního přijímacího argumentu.
Selhání vstupu => Vrátí EOF, pokud dojde k selhání vstupu před přiřazením prvního přijímacího argumentu.
Popis:
Funkce Scanf () je definována v záhlaví. Tato funkce načte data ze standardního vstupu a uloží je do zadaných proměnných.
Specifikátor formátu použitý ve funkci scanf ()
Obecný formát řetězce formátu funkce scanf () je:
%(*)(width)(length)specifier
Specifikátor formátu má tedy následující části:
- Znak bez mezer: Jedná se o znaky kromě%, které spotřebovávají jeden identický znak ze vstupního proudu.
- Mezera znak: Všechny po sobě následující prázdné znaky jsou považovány za jeden prázdný znak. Totéž platí i pro únikové sekvence.
- Specifikace převodu: Má následující formát:
- %: Znak, který určuje začátek.
- *: Volaný znak potlačující přiřazení. Je-li přítomen, scanf nepřiřadí výsledek žádným přijímacím parametrům. Tento parametr je volitelný.
- Šířka pole: Volitelný parametr (kladné celé číslo), který určuje maximální šířku pole.
- Délka: Určuje velikost přijetí argumentu.
Specifikátor formátu převodu může být následující:
Ne | Specifikátor formátu | Popis |
---|---|---|
7 | x / X | Porovná hexadecimální celé číslo bez znaménka. |
jeden | % | Odpovídá doslovnému%. |
dva | C | Porovná jeden znak nebo více znaků až do šířky. |
3 | s | Odpovídá posloupnosti znaků bez mezery, dokud není zadána šířka nebo první mezery. |
4 | d | Odpovídá desítkovému. |
5 | i | Odpovídá celému číslu. |
6 | nebo | Odpovídá osmičkové celé číslo bez znaménka. |
8 | u | Odpovídá celému číslu bez znaménka. |
9 | a / A, e / E, f / F, g / G | Odpovídá číslu s plovoucí desetinnou čárkou. |
10 | (soubor) | Porovná neprázdnou sekvenci znaků z dané sady. Pokud předchází ^, pak se shodují znaky, které nejsou v sadě. |
12 | n | Vrátí počet dosud přečtených znaků. |
13 | str | Ukazatel na implementaci specifické posloupnosti znaků. |
Dále implementujeme ukázkový program, který demonstruje použití funkce scanf v C ++
scanf Pří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ýstup:
Ve výše uvedeném programu jsme načetli dva vstupní řetězce a šestnáctkové číslo. Pak spojíme dva řetězce a zobrazíme výsledný řetězec. Číslo se převede na desetinné místo a zobrazí se.
scanf / printf vs. cin / cout V C ++
scanf / printf | cin / náklady |
---|---|
Standardní vstup-výstup v jazyce C. | Standardní vstup-výstup v jazyce C ++. |
Definováno v „stdio.h“. | Definováno v „proudu“. |
scanf a printf jsou funkce používané pro I / O. | cin a cout jsou objekty proudu. |
Řetězec formátu se používá pro formátování vstupu a výstupu. | Provozovatelé >> a<< are overloaded and used along with cin and cout respectively. Není použit žádný formátovací řetězec. |
Typ dat určujeme pomocí zástupného symbolu. | Není třeba specifikovat datový typ. |
Často kladené otázky
Otázka č. 1) Můžete použít printf v C ++?
Odpovědět: Ano. Printf lze použít v C ++. Chcete-li použít tuto funkci v programu C ++, musíme do programu zahrnout záhlaví.
Otázka 2) Jaký jazyk používá printf?
Odpovědět: Printf je standardní výstupní funkce v jazyce C. Může být také použit v jazyce C ++ zahrnutím záhlaví do programu C ++.
Otázka č. 3) Co je% d v programování C?
Odpovědět: % d hodnota ve funkci printf odkazuje na celočíselnou hodnotu.
Otázka č. 4) Proč a je používán v Scanf?
Odpovědět: & Operátor se používá pro přístup k umístění v paměti. Je zkratkou předat ukazatel do proměnné namísto jejího explicitního předání.
Otázka č. 5) Jaký je rozdíl mezi printf () a sprintf ()?
Odpovědět: Funkce printf () a sprintf () jsou stejné až na jeden rozdíl. Zatímco printf () zapisuje výstup na stdout (standardní výstup), sprintf zapisuje výstup do vyrovnávací paměti znakového řetězce.
Otázka č. 6) Ukončí Sprintf null?
Odpovědět: sprintf vrací počet znaků uložených v poli řetězců znaků kromě nulového ukončovacího znaku.
Otázka č. 7) Proč je sprint nebezpečný?
Odpovědět: Funkce Sprintf nekontroluje délku cílového bufferu. Proto když je délka formátovacího řetězce příliš dlouhá, funkce může způsobit přetečení cílové vyrovnávací paměti. To může vést k problémům s nestabilitou aplikace a zabezpečením, čímž bude funkce sprintf nebezpečná.
Závěr
V tomto tutoriálu jsme se naučili vstupní a výstupní funkce knihovny C - printf, sprintf a scanf, které lze použít v C ++, včetně záhlaví, které je ekvivalentem pro záhlaví C.
Jak již bylo uvedeno, funkce vstupu a výstupu používají specifikátory formátu a držáky míst a musíme určit datové typy proměnných, do kterých se data čtou nebo zapisují.
Naopak streamované objekty používané v C ++ - cin a cout nepoužívají žádné specifikátory formátu ani zástupné symboly. Používají přetížené >> a<< operators to read in and write the data.
=> Podívejte se na průvodce Perfect C ++ Training Guide zde.