Formatierte Eingabe/Ausgabe (sehr detaillierte Serie in C-Sprache) (1)

Vorwort;

Hallo zusammen, mein Name ist sy. Heute werden wir hauptsächlich die formatierte Ein-/Ausgabe (1) besprechen, einschließlich der grundlegenden Verwendung und Vorsichtsmaßnahmen von printf und scanf, einem einfachen Verständnis der Konvertierungsanweisungen und einer Erklärung der Escape-Sequenzen. Wir werden folgen up Bringen Sie weiterhin ein tiefgreifendes Studium der Konvertierungsanweisungen und Kenntnisse über Eingabepufferungskonzepte in Bezug auf Dateien ein, einschließlich Zeicheneingabe und -ausgabe, Zeileneingabe und -ausgabe sowie Blockeingabe und -ausgabe. Das Wissen, das wir heute besprechen, wird der Inhalt sein, der umfassend behandelt wird, wenn man mit der C-Sprache beginnt, sowie eine Zusammenfassung der Fallstricke, auf die wir oft stoßen. Werfen wir gemeinsam einen Blick darauf~~

1. printf-Funktion

 Grundformat: printf ( Formatzeichenfolge, Ausdruck 1, Ausdruck 2,... ); Die printf-Funktion wird verwendet, um den Inhalt der Formatzeichenfolge anzuzeigen und einen möglichen Wert an der angegebenen Position in der Zeichenfolge einzufügen. Beim Aufruf von printf muss eine Formatzeichenfolge angegeben werden .Der Parameter nach der Formatzeichenfolge ist der Wert, der während der Anzeige in die Zeichenfolge eingefügt wird (kann eine Konstante, eine Variable oder ein komplexer Ausdruck sein).

Formatzeichenfolge: Enthält gewöhnliche Zeichen und Konvertierungsanweisungen, wobei die Konvertierungsanweisungen mit % beginnen  . Die Konvertierungsangabe ist ein Platzhalter , der den Wert darstellt, der während des Druckvorgangs ausgefüllt werden sollDie Informationen nach % geben die Konvertierung des Werts aus der Berechnung und der internen Form (binär) in die Form an, die Sie drucken möchten.

Beispiel: Die Konvertierungsbeschreibung %d gibt an, dass die printf-Funktion einen int-Wert von der Binärform in die Dezimalform konvertiert.

* Folgende Punkte sind zu beachten:

1. Die gewöhnlichen Zeichen in der Formatzeichenfolge müssen vollständig „kopiert“ und angezeigt werden, und die Konvertierungsanweisungen müssen durch angezeigte Werte „ersetzt“ werden . Zum Beispiel:

    int i, j;
	float x, y;
	i = 1;
	j = 2;
	x = 2.55f;
	y = 20.0f;
	printf("i=%d,j=%d\nx=%f,y=%f",i,j,x,y);

Ausgabeergebnisse: Es ist ersichtlich, dass die gewöhnlichen Zeichen „i=, j=, x=, y=“ und „Komma“ in der Formatzeichenfolge in die Ausgabezeile „kopiert“ werden, während die Werte der Variablen i, j, x, y werden 4 Konvertierungsanweisungen nacheinander ersetzt.

 

2. Achten Sie darauf, ob die Konvertierungsbeschreibung im Formatstring mit der Anzahl der Ausgabeelemente übereinstimmt.

· Wenn mehr Konvertierungsanweisungen vorhanden sind als die Anzahl der anzuzeigenden Werte:

    int i = 1;
	int j = 2;
	printf("%d %d\n", i);

Ausgabeergebnis: Es ist ersichtlich, dass die printf-Funktion den Wert von i korrekt anzeigt und dann einen bedeutungslosen Wert anzeigt.

 

· Wenn die Anzahl der Konvertierungsanweisungen geringer ist als die Anzahl der anzuzeigenden Werte:

    int i = 1;
	int j = 2;
	printf("%d\n", i, j);

Ausgabeergebnisse: Es ist ersichtlich, dass nur der Wert von i ausgegeben wird und der Wert von j nicht angezeigt wird.

 

· Achten Sie auch darauf, die richtige Konvertierungsspezifikation passend zum Anzeigeelement zu verwenden:

    int i = 1;
	float j = 2.5f;
	printf("%d %f", j, i);

Ausgabeergebnisse: Es ist ersichtlich, dass das Programm eine bedeutungslose Ausgabe erzeugt, wenn die Reihenfolge der Variablen i vom Typ int und Variable j vom Typ float in der falschen Reihenfolge liegt. 

 

2. Konvertierungsanweisungen

* Konvertierungsanweisungen bieten Programmierern eine große Anzahl von Methoden zur Steuerung des Ausgabeformats. Konvertierungsanweisungen enthalten manchmal Formatierungsinformationen, zum Beispiel: Verwenden Sie %.1f, um einen Gleitkommawert mit einer Ziffer nach dem Dezimalpunkt anzuzeigen.

* Im Allgemeinen können die Konvertierungsanweisungen im %m.pX- Format oder im -%m.pX- Format vorliegen , wobei m und p jeweils ganzzahlige Konstanten sind und X ein Buchstabe ist. m und p werden je nach Bedarf vom Benutzer definiert. Wenn p weggelassen wird , wird auch der Dezimalpunkt zwischen m und p entfernt.

·Beispiel: In der Konvertierungsanweisung 10.2f ist m gleich 10, p gleich 2 und X gleich f. Wenn die Konvertierungsbeschreibung %10f lautet, ist m 10, p wird zusammen mit dem Dezimalpunkt weggelassen, und wenn die Konvertierungsbeschreibung %.2f lautet, ist p 2 und m wird weggelassen.

In der Konvertierungsbeschreibung %m.pX gibt m die Mindestanzahl der anzuzeigenden Zeichen an, die als minimale Spaltenbreite bezeichnet wird. (kann als Gesamtzahl der in der Ausgabe angezeigten Zeichen m verstanden werden)

* Wenn die Anzahl der anzuzeigenden Zeichen weniger als m beträgt, wird der Wert rechtsbündig im Feld angezeigt (fügen Sie vor dem Wert ein Leerzeichen ein, um die Zahl zu bilden), zum Beispiel: %4d zeigt die Zahl 123 an die Form von 123 (fügen Sie vor 123 ein Leerzeichen ein).

* Wenn die Anzahl der anzuzeigenden Werte mehr als m beträgt, wird die Spaltenbreite automatisch erweitert . Beispiel: %4d zeigt die Zahl 12345 in der Form 12345 an, ohne dass die Ziffern verloren gehen.

* Das Hinzufügen eines negativen Vorzeichens vor m führt dazu, dass der angezeigte Wert linksbündig angezeigt wird . Beispiel: %-4d zeigt 123 in der Form 123 an (nach 123 steht ein Leerzeichen).

In der Konvertierungsbeschreibung %m.pX wird p als Genauigkeit bezeichnet. (In Gleitkommazahlen können p Nachkommastellen dargestellt werden.) Dies hängt von der Auswahl des Konvertierungsspezifizierers X ab, der angibt, welche Art von Konvertierung für den Wert durchgeführt werden muss, bevor er angezeigt wird. Hier sind einige häufig verwendete Konvertierungsspezifizierer (die umfassende Tabelle wird später ausführlich vorgestellt).

*d – stellt eine ganze Zahl in Dezimalform dar. p gibt die Mindestanzahl der anzuzeigenden Werte an (falls fehlend, fügen Sie vor der Zahl eine zusätzliche Null hinzu)

*e – Stellt eine Gleitkommazahl in Exponentialform (wissenschaftliche Notation) dar. p gibt die Anzahl der Stellen an, die nach dem Dezimalpunkt erscheinen sollen (Standardwert ist 6). Wenn p 0 ist, wird kein Dezimalpunkt angezeigt.

*f – stellt eine Gleitkommazahl ohne Exponenten dar, p hat die gleiche Bedeutung wie der Bezeichner e.

*g – Stellt eine Gleitkommazahl in Exponentialform oder Festkomma-Dezimalform dar. Die Wahl der Form hängt von der Größe der Zahl ab . p bedeutet die maximale Anzahl der signifikanten Ziffern, die angezeigt werden können (keine Zahlen nach dem Komma). Im Gegensatz zu f werden bei der Konvertierung von g keine nachgestellten Nullen angezeigt (wenn der Wert auf angezeigt werden, indem g keinen Dezimalpunkt hat. Nach der Zahl zeigt g keinen Dezimalpunkt an. Bei der Anzeige mittelgroßer Zahlen verwendet g die Festkomma-Dezimalzahl; bei der Anzeige sehr großer oder sehr kleiner Zahlen wird g in die Exponentialform umgewandelt.

    int i;
	float x;
	i = 40;
	x = 200.20f;
	printf("|%d|%5d|%-5d|%5.3d|\n", i, i, i, i);
	printf("|%10.3f|%10.3e|%-10g|\n", x, x, x);

Ausgabeergebnis: 

 

 Analyse:

· %d – Zeigt die Variable i in Dezimalform an, die den geringsten Platz einnimmt.

· %5d – zeigt die Variable i in Dezimalform an und benötigt mindestens 5 Zeichen Platz. Da i nur 2 Zeichen belegt, werden vorne 3 Leerzeichen eingefügt.

· %-5d – Zeigt die Variable i in Dezimalform an und belegt mindestens 5 Zeichen Platz. Da der Wert von i nicht 5 Zeichen lang sein muss, werden an nachfolgenden Positionen Leerzeichen hinzugefügt (Zahlen werden linksbündig ausgerichtet).

%5.3d – zeigt die Variable i in Dezimalform an, benötigt mindestens 5 Zeichen Platz und hat mindestens 3 Ziffern. Da die Variable i nur 2 Zeichen lang ist, muss eine zusätzliche Null hinzugefügt werden, um sicherzustellen, dass es drei Ziffern gibt (Jetzt ist es nur noch 3 Zeichen lang. Um sicherzustellen, dass es 5 Zeichen einnimmt, müssen 2 Leerzeichen hinzugefügt werden. Beachten Sie, dass es rechtsbündig ist.)

· %10.3f – Zeigt die Variable x in Festkomma-Dezimalform mit insgesamt 10 Zeichen an, einschließlich 3 Dezimalstellen nach dem Dezimalpunkt. Da die Variable x nur 7 Zeichen benötigt (den Dezimalpunkt mitgezählt), werden 3 Leerzeichen hinzugefügt Vorderseite.

· %10.3e – Variable x in Exponentialform anzeigen, mit insgesamt 10 Zeichen und 3 Nachkommastellen. Die abhängige Variable x hat 9 Zeichen, daher wird vorne ein Leerzeichen eingefügt.

`%-10g——Die Variable x kann in Festkomma-Dezimalform oder in Exponentialform mit insgesamt 10 Zeichen angezeigt werden. Da die Zahl klein ist, wird die Festkomma-Dezimalform linksbündig ausgewählt, gefolgt von 4 Leerzeichen.

3. Escape-Sequenz

 Das in Formatzeichenfolgen häufig verwendete \n wird als Escape-Sequenz bezeichnet. Escape-Sequenzen enthalten oft einige Sonderzeichen, ohne Compilerfehler zu verursachen. Zu diesen Zeichen gehören nicht druckbare Steuerzeichen und einige Zeichen mit besonderer Bedeutung. Lassen Sie uns zunächst einige häufig verwendete Escape-Zeichen vorstellen:

*Alarmglockensymbol: \a //erzeugt einen Ton

*Rückgabezeichen: \b // bewirkt, dass der Cursor eine Position von der aktuellen Position zurückgeht

*Zeilenumbruch:\n // bewirkt, dass der Cursor zum Anfang der nächsten Zeile springt

*Horizontaler Tabulator: \t //bewegt den Cursor zur nächsten Tabulatorposition (im Allgemeinen ist der Abstand zwischen horizontalen Tabulatoren // 8 Zeichen lang, was bedeutet, dass die aktuelle Länge auf 8 vervollständigt wird, aber es hängt auch von // ab Betriebssystem, das Sie verwenden, normalerweise ein ganzzahliges Vielfaches von 8)

* stellt das Zeichen „:\“ dar // Zeigt das Ausgabezeichen an „

 

·Die folgende Abbildung zeigt die Auswirkungen horizontaler Tabulatoren und Zeilenumbrüche: 

printf("Item\tUnit\tPutchase\n\tPrice\tDate\n");

 Ausgabeergebnis: Sie können sehen, dass das horizontale Tabulatorzeichen eine Länge von 8 Zeichen einnimmt (einschließlich des Ausgabezeichens selbst, wenn es weniger als 8 Zeichen beträgt, fügen Sie 4 Leerzeichen hinzu).

 

·Wenn Sie „ “ anzeigen möchten: 

printf("\"Hello!\"");

 Ausgabeergebnis: 

 

 4. Scanf-Funktion

*Wie printf liest auch scanf Eingaben gemäß einem bestimmten Format. Die Formatzeichenfolge von scanf kann auch zwei Teile enthalten: normale Zeichen und Konvertierungsanweisungen .

*In vielen Fällen enthält die Formatzeichenfolge der Scanf-Funktion nur Konvertierungsanweisungen, zum Beispiel: scanf ("%d %d",&i,&j); Angenommen, der Benutzer gibt 1 -2 ein

 Die Funktion der Scanf-Funktion besteht darin, die vom Benutzer eingegebenen Informationen zu lesen und dann den Variablen i und j die Werte 1-2 zuzuweisen.

*Es ist zu beachten: Erstens: Wenn Sie die Scanf-Funktion verwenden, müssen Sie prüfen, ob die Anzahl der Konvertierungsanweisungen mit der Anzahl der Eingabevariablen übereinstimmt, und prüfen, ob jede Konvertierung einer Variablen entspricht. Zweitens: & wird normalerweise vor jeder Variablen platziert , vergessen Sie es nicht, außer in besonderen Fällen (wenn es selbst Adressinformationen darstellt, weil & bedeutet, die Adresse zu erhalten).

Neuinterpretation der Bedeutung von scanf 

 Die Scanf-Funktion ist im Wesentlichen eine „Mustervergleichs“-Funktion, die versucht, Eingabezeichen mit Konvertierungsanweisungen abzugleichen. Wenn die Scanf-Funktion aufgerufen wird, verarbeitet scanf die Informationen in der Zeichenfolge beginnend am linken Ende. Für jede Konvertierungsbeschreibung sucht die Scanf-Funktion nach dem übereinstimmenden Element und überspringt bei Bedarf Leerzeichen. Anschließend liest scanf das Eingabeelement weiter, bis es auf Stop stößt Lesen, wenn Zeichen erreicht werden, die nicht übereinstimmen, und die verbleibenden Zeichen werden zum Lesen an den nächsten Scanf übergeben.

Schauen wir uns ein sehr verwirrendes Beispiel an: 

    int i, j;
	float x, y;
	scanf("%d%d%f%f", &i, &j, &x, &y);
	printf("i=%d,j=%d,x=%f,y=%f", i, j, x, y);

Hier geben wir 1-20.3-4.0e3\n ein

Ausgabeergebnis: 

 

erklären:

*Konvertierungsbeschreibung %d: Das erste Nicht-Null-Eingabezeichen ist 1, und die Ganzzahl kann bei 1 beginnen, sodass scanf weiterhin abwärts liest. Bei der Begegnung mit - stellt scanf fest, dass das negative Vorzeichen nicht mit der Ganzzahl-%d-Konvertierungsbeschreibung übereinstimmt , also speichere 1 in i und setze - zurück.

*Konvertierungsbeschreibung %d: Dann liest scanf -, 2, 0 und ., scanf liest die Ganzzahl -20 erfolgreich und speichert sie in j. Wenn ein Dezimalpunkt angetroffen wird, stimmt er nicht mit der Konvertierungsbeschreibung überein und das Zeichen . ist wieder in seine ursprüngliche Position bringen.

*Konvertierungsanweisungen %f: scanf liest ., 3, - Zeichen. Da nach einer Gleitkommazahl kein negatives Vorzeichen stehen darf, speichert scanf 0,3 in x. -Setzen Sie es wieder an seinen ursprünglichen Platz.

*Konvertierungsbeschreibung %f: Schließlich liest scanf -, 4, ., 0, e, 3 und Newline-Zeichen. Da Gleitkommazahlen keine Newline-Zeichen enthalten, speichert scanf -4,0*10 hoch in der dritten Potenz in y und setzt die Newline-Zeichen in y. Das Zeichen wird an seinen ursprünglichen Platz (Puffer, wir werden es das nächste Mal im Detail vorstellen) zurückgesetzt und bleibt für den nächsten Scanf-Aufruf übrig.

*Hinweis: Bei der Verwendung von scanf müssen Sie auf die Formatanpassung achten. Beim Lesen einer Zeichenfolge stoppt scanf() den Lesevorgang, solange es auf ein Leerzeichen trifft. Daher ist „das ist test“ für scanf() eine Zeichenfolge von drei, ein weiteres Beispiel : In scanf ("%d, %d", &i, &j); sucht die Scanf-Funktion zunächst nach einer geeigneten Eingabe-Ganzzahl und speichert sie in i. Anschließend versucht scanf, das Komma mit dem nächsten Eingabezeichen abzugleichen. Wenn Wenn Das nächste Zeichen ist ein Leerzeichen anstelle eines Kommas. Die Scanf-Funktion beendet den Vorgang und liest den Wert von j nicht mehr.

Wir werden auch in Zukunft weitere Interpretationen von Input und Output bereitstellen. Vielen Dank an alle fürs Lesen! ! ! Wenn Sie Fragen haben, können Sie diese gerne im Kommentarbereich kommentieren und unterstützen! ! !

 

 

 

 

 

Ich denke du magst

Origin blog.csdn.net/m0_74475605/article/details/132049500
Empfohlen
Rangfolge