formatting i o printf
In diesem Lernprogramm werden die Verwendung und Beispiele von Funktionen wie printf, sprintf und scanf erläutert, die zum Formatieren der Eingabe / Ausgabe in C ++ verwendet werden:
In unseren vorherigen C ++ - Tutorials haben wir gesehen, dass wir Input-Output-Operationen in C ++ mit cin / cout ausführen können.
Neben diesen Konstrukten können wir auch die C-Bibliothek verwenden. Unter Verwendung der C-Standard-Eingabe- und Ausgabebibliothek (cstdio, C ++ - Äquivalent für stdio.h-Header in C-Sprache) führen wir E / A-Vorgänge mit „Streams“ aus, die mit physischen Geräten wie Tastaturen (Standardeingabe), Druckern und Terminals (Standardausgabe) arbeiten ) oder andere vom Betriebssystem unterstützte Dateitypen.
=> Lesen Sie hier die ausführlichen C ++ - Schulungsanleitungen.
Streams sind nichts anderes als eine abstrakte Einheit, mit der auf einheitliche Weise mit physischen Geräten interagiert wird. Alle Streams haben ähnliche Eigenschaften und sind unabhängig von den physischen Mediengeräten.
In unseren nächsten Themen in diesem Lernprogramm werden wir einige Funktionen, d. H. Printf, sprint und scanf, ausführlich kennenlernen.
Was du lernen wirst:
- C ++ printf
- C ++ Sprintf
- C ++ scanf
- scanf / printf Vs. cin / cout In C ++
- Häufig gestellte Fragen
- Fazit
C ++ printf
Die Funktion printf in C ++ wird verwendet, um die Ausgabe zu schreiben, die in stdout formatiert ist.
Funktionsprototyp:
int printf (const char * Format,…);
Parameter:
Format => Ein Zeiger auf eine nullterminierte Zeichenfolge, die in den Dateistream geschrieben wird. Es besteht aus Zeichen und einem optionalen Formatbezeichner, der mit% beginnt. Der Formatbezeichner wird durch entsprechende Werte ersetzt, die auf die Formatzeichenfolge folgen.
… => Andere zusätzliche Argumente, die die zu druckenden Daten in der angegebenen Reihenfolge angeben.
Rückgabewert:
pl sql Interview Fragen mit Antworten
Erfolg => printf gibt die Anzahl der zurückgegebenen Zeichen zurück.
Fehler => Negativer Wert
Beschreibung:
Die Funktion printf ist im Header definiert. Die printf-Funktionen schreiben die Zeichenfolge, auf die der Zeiger „format“ zeigt, auf die Standardausgabe stdout. Die Formatzeichenfolge kann Formatspezifizierer enthalten, die dann durch die Variablen ersetzt werden, die als zusätzliche Argumente an die Funktion printf übergeben werden (nach der Formatzeichenfolge).
Formatbezeichner, der in der Funktion printf () verwendet wird
Eine allgemeine Form des Formatbezeichners ist
%(flags)(width)(.precision)(length)specifier
Nachstehend finden Sie eine Beschreibung der einzelnen Teile des Formatbezeichners:
- % Zeichen: Dies ist ein führendes% -Zeichen
- Flaggen: Sie können folgende Werte haben:
- -: Links rechtfertigt das Ergebnis innerhalb des Feldes. Standardmäßig rechtsbündig.
- +: Das Vorzeichen des Ergebnisses am Anfang des Wertes einschließlich positiver Ergebnisse.
- Leerzeichen: Wenn kein Zeichen vorhanden ist, wird am Anfang des Ergebnisses ein Leerzeichen eingefügt.
- #: Geben Sie eine alternative Form der Konvertierung an.
- 0: Wird für Ganzzahl- und Gleitkommazahlen verwendet. In Abwesenheit von Leerzeichen als führende Nullen fungieren.
- Breite: Gibt die minimale Feldbreite in Form eines * oder eines ganzzahligen Werts an. Dies ist optional.
- Präzision: Gibt die Genauigkeit mit einem '.' An, gefolgt von einem * oder einer Ganzzahl oder nichts. Dies ist auch optional.
- Länge: Das optionale Argument, das die Größe des Arguments angegeben hat.
- Spezifizierer: Dies ist ein Konvertierungsformatspezifizierer.
In C ++ werden verschiedene Formatspezifizierer verwendet:
Nein | Spezifizierer | Beschreibung |
---|---|---|
7 | u | Konvertiert eine vorzeichenlose Ganzzahl in eine Dezimaldarstellung. |
ein | %. | Druckt ein%. |
zwei | c | Druckt ein einzelnes Zeichen. |
3 | s | Druckt eine Zeichenfolge. |
4 | d / i | Konvertiert eine vorzeichenbehaftete Ganzzahl in eine Dezimaldarstellung. |
5 | oder | Konvertiert vorzeichenlose Ganzzahlen in oktale Darstellungen. |
6 | x / X. | Konvertiert eine vorzeichenlose Ganzzahl in eine hexadezimale Darstellung. |
8 | f / F. | Konvertiert die Gleitkommazahl in eine Dezimaldarstellung. |
9 | und / E. | Konvertiert die Gleitkommazahl in die Dezimal-Exponenten-Notation. |
10 | a / A. | Konvertiert die Gleitkommazahl in einen hexadezimalen Exponenten. |
elf | g / G. | Konvertiert die Gleitkommazahl in eine dezimale oder dezimale Exponentennotation. |
12 | n | Anzahl der bisher von diesem Funktionsaufruf geschriebenen Zeichen. |
13 | p | Ein Zeiger, der auf die von der Implementierung definierte Zeichenfolge zeigt. |
Im Folgenden finden Sie ein vollständiges C ++ - Programmierbeispiel, das die oben beschriebene Funktion printf demonstriert.
C ++ printf Beispiel
#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; }
Ausgabe:
Das obige Programm verwendet verschiedene Aufrufe der Funktion printf und wir stellen fest, dass jeder Aufruf von printf verschiedene Formatspezifizierer verwendet, die wir oben besprochen haben. Der Formatbezeichner% .3f bezeichnet einen Gleitkommawert mit bis zu 3 Dezimalstellen. Die restlichen printf-Aufrufe zeigen die Zeichen-, Dezimal-, Oktal- und Hex-Werte an.
C ++ Sprintf
Sprintf-Funktion in C ++ ähnlich der printf-Funktion, außer mit einem Unterschied. Anstatt die Ausgabe in die Standardausgabe stdout zu schreiben, schreibt sprintf die Ausgabe in einen Zeichenfolgenpuffer.
Funktionsprototyp:
int sprintf (char * buffer, const char * format,…)
Parameter:
Puffer => Zeiger auf einen String-Puffer, in den das Ergebnis geschrieben werden soll.
Format => Zeiger auf eine nullterminierte Zeichenfolge, die in den Dateistream geschrieben wird.
Hinweis: Die in der Sprintf-Funktion verwendete Formatzeichenfolge entspricht der in der Beschreibung der printf-Funktion beschriebenen.
… => Andere zusätzliche Argumente, die die zu druckenden Daten in der angegebenen Reihenfolge angeben.
Rückgabewert:
Erfolg => Gibt die Anzahl der in den ausreichend großen Puffer geschriebenen Zeichen ohne das abschließende Nullzeichen zurück.
Fehler => Ein negativer Wert wird zurückgegeben.
Beschreibung:
Die Sprintf-Funktion ist im Header definiert. Die Sprintf-Funktion wird verwendet, um eine Zeichenfolge, auf die das Format zeigt, in den Zeichenfolgenpuffer zu schreiben. Das Zeichenfolgenformat kann Formatspezifizierer enthalten, die mit% beginnen und durch die Werte von Variablen ersetzt werden, die als zusätzliche Argumente an die Funktion sprintf () übergeben werden.
Sehen wir uns ein C ++ - Beispielprogramm an, das die Verwendung der Sprintf-Funktion zeigt.
sprintf Beispiel
#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; }
Ausgabe:
Im obigen Beispiel schreiben wir zuerst eine formatierte Zeichenfolge mit der Funktion sprintf in einen Zeichenpuffer mybuf. Dann zeigen wir den String mit cout auf stdout an. Schließlich zeigen wir die Anzahl der Zeichen an, die in den mybuf-Puffer geschrieben wurden.
C ++ scanf
Die scanf-Funktion in C ++ liest die Eingabedaten von der Standardeingabe stdin.
Funktionsprototyp:
int scanf (const char * Format,…)
Parameter:
Format => Zeiger auf eine nullterminierte Zeichenfolge, die definiert, wie die Eingabe gelesen wird. Diese Formatzeichenfolge besteht aus Formatspezifizierern.
… => Zusätzliche Argumente, die Dateneingabe erhalten. Diese zusätzlichen Argumente sind gemäß dem Formatbezeichner nacheinander angeordnet.
Rückgabewert:
Erfolg => Gibt eine Anzahl von eingelesenen Zeichen zurück.
MatchingFailure => Gibt Null zurück, wenn ein Übereinstimmungsfehler auftritt, bevor das erste empfangende Argument zugewiesen wird.
Eingabefehler => Gibt EOF zurück, wenn ein Eingabefehler auftritt, bevor das erste empfangende Argument zugewiesen wird.
Beschreibung:
Die Funktion Scanf () ist im Header definiert. Diese Funktion liest die Daten aus stdin und speichert sie in den bereitgestellten Variablen.
Formatbezeichner, der in der Funktion scanf () verwendet wird
Das allgemeine Format für die Zeichenfolge des Funktionsformats scanf () lautet:
%(*)(width)(length)specifier
Somit besteht der Formatbezeichner aus folgenden Teilen:
- Nicht-Leerzeichen: Dies sind die Zeichen mit Ausnahme von%, die ein identisches Zeichen aus dem Eingabestream verbrauchen.
- Leerzeichen: Alle aufeinanderfolgenden Leerzeichen werden als ein Leerzeichen betrachtet. Gleiches gilt auch für Escape-Sequenzen.
- Konvertierungsspezifikation: Es hat das folgende Format:
- %: Zeichen, das den Anfang angibt.
- *: Wird als zuweisungsunterdrückendes Zeichen bezeichnet. Falls vorhanden, weist der scanf das Ergebnis keinen Empfangsparametern zu. Dieser Parameter ist optional.
- Feldbreite: Optionaler Parameter (eine positive Ganzzahl), der eine maximale Feldbreite angibt.
- Länge: Gibt die Größe des Empfangs eines Arguments an.
Der Konvertierungsformatspezifizierer kann wie folgt lauten:
Nein | Formatbezeichner | Beschreibung |
---|---|---|
7 | x / X. | Entspricht einer vorzeichenlosen hexadezimalen Ganzzahl. |
ein | %. | Entspricht dem Literal%. |
zwei | c | Entspricht einzelnen Zeichen oder mehreren Zeichen bis zur Breite. |
3 | s | Entspricht der Sequenz von Nicht-Leerzeichen bis zur angegebenen Breite oder dem ersten Leerzeichen. |
4 | d | Entspricht der Dezimalstelle. |
5 | ich | Entspricht der Ganzzahl. |
6 | oder | Entspricht einer vorzeichenlosen oktalen Ganzzahl. |
8 | u | Entspricht einer vorzeichenlosen Dezimalzahl. |
9 | a / A, e / E, f / F, g / G. | Entspricht der Gleitkommazahl. |
10 | (einstellen) | Entspricht einer nicht leeren Zeichenfolge aus dem angegebenen Satz. Wenn ^ vorangestellt ist, werden Zeichen, die nicht im Satz enthalten sind, abgeglichen. |
12 | n | Gibt die Anzahl der bisher gelesenen Zeichen zurück. |
13 | p | Zeiger auf implementierungsspezifische Zeichenfolge. |
Als nächstes werden wir ein Beispielprogramm implementieren, um die Verwendung der scanf-Funktion in C ++ zu demonstrieren
scanf Beispiel
#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; }
Ausgabe:
Im obigen Programm lesen wir zwei Eingabezeichenfolgen und eine Hexadezimalzahl. Dann kombinieren wir die beiden Zeichenfolgen und zeigen die resultierende Zeichenfolge an. Die Zahl wird in eine Dezimalzahl umgewandelt und angezeigt.
scanf / printf Vs. cin / cout In C ++
scanf / printf | cin / kosten |
---|---|
Standardeingabe-Ausgabe in C-Sprache. | Standardeingabe-Ausgabe in C ++. |
Definiert in 'stdio.h'. | Definiert in 'iostream'. |
scanf und printf sind eine Funktion, die für E / A verwendet wird. | cin und cout sind Stream-Objekte. |
Die Formatzeichenfolge wird zum Formatieren der Eingabe und Ausgabe verwendet. | Operatoren >> und<< are overloaded and used along with cin and cout respectively. Es wird keine Formatzeichenfolge verwendet. |
Wir geben die Art der Daten mit dem Platzhalter an. | Der Datentyp muss nicht angegeben werden. |
Häufig gestellte Fragen
F # 1) Können Sie printf in C ++ verwenden?
Antworten: Ja. Printf kann in C ++ verwendet werden. Um diese Funktion in einem C ++ - Programm zu verwenden, müssen wir den Header in das Programm aufnehmen.
F # 2) Welche Sprache verwendet printf?
Antworten: Printf ist die Standardausgabefunktion in der Sprache C. Es kann auch in C ++ verwendet werden, indem der Header in das C ++ - Programm aufgenommen wird.
F # 3) Was ist% d in der C-Programmierung?
Antworten: Der Wert% d in der Funktion printf bezieht sich auf einen ganzzahligen Wert.
F # 4) Warum & wird in Scanf verwendet?
Antworten: Der Operator & wird verwendet, um auf den Speicherort zuzugreifen. Es ist eine Abkürzung, einen Zeiger auf die Variable zu übergeben, anstatt ihn explizit zu übergeben.
F # 5) Was ist der Unterschied zwischen printf () und sprintf ()?
Antworten: Beide Funktionen printf () und sprintf () sind bis auf einen Unterschied gleich. Während printf () die Ausgabe in stdout (Standardausgabe) schreibt, schreibt sprintf die Ausgabe in einen Zeichenkettenpuffer.
F # 6) Wird Sprintf null beendet?
Antworten: sprintf gibt die Anzahl der im Zeichenfolgenarray gespeicherten Zeichen ohne das Nullterminierungszeichen zurück.
F # 7) Warum ist Sprintf unsicher?
Antworten: Die Sprintf-Funktion überprüft nicht die Länge des Zielpuffers. Wenn die Länge der Formatzeichenfolge zu lang ist, kann die Funktion daher den Überlauf des Zielpuffers verursachen. Dies kann zu Instabilität der Anwendung und Sicherheitsproblemen führen, wodurch die Sprintf-Funktion unsicher wird.
Fazit
In diesem Tutorial haben wir die Eingabe- / Ausgabefunktionen der C-Bibliothek gelernt - printf, sprintf und scanf, die in C ++ verwendet werden können, indem der Header eingeschlossen wird, der dem C-Header entspricht.
Wie bereits erläutert, verwenden die Eingabe- / Ausgabefunktionen Formatbezeichner und Platzhalter, und wir müssen die Datentypen von Variablen angeben, in die Daten gelesen oder geschrieben werden.
Im Gegensatz dazu verwenden die in C ++ - cin und cout verwendeten Streaming-Objekte keine Formatspezifizierer oder Platzhalter. Sie verwenden überladene >> und<< operators to read in and write the data.
=> Lesen Sie hier den perfekten C ++ - Schulungsleitfaden.
Literatur-Empfehlungen
- Python-String-Funktionen
- VBScript-Datumsfunktionen: Datumsformat-, DateAdd- und cDate-Funktionen
- JMeter-Variablen und -Funktionen
- Python-Funktionen
- Bibliotheksfunktionen in C ++
- Unix-Shell-Skriptfunktionen mit Parametern und Return
- Datums- und Uhrzeitfunktionen in C ++ mit Beispielen
- Friend-Funktionen in C ++