C macht die Textverarbeitung nicht kompliziert. Es entfernt die Abstraktionsschichten und hinterlässt die rohe Mechanik. Wenn Sie sich die C-Dokumentation angesehen haben, ist Ihnen wahrscheinlich aufgefallen, dass alle Texteingabe-/-ausgabefunktionen in der stdio -Bibliothek gespeichert sind. Dies steht für Standard-Eingabe/Ausgabe. Es ist die Grundlage dafür, wie C-Programme mit der Außenwelt kommunizieren.

Die meisten Anfänger beginnen mit stdin und stdout. Dies sind Standard-Streams. Sie stellen dar, wo ein Programm Daten erhält und wohin es Ergebnisse sendet. Wenn Ihre Anwendung nur eine Eingabequelle und eine Ausgabesenke benötigt, ist keine komplexe Dateiverwaltung erforderlich. Sie leiten Daten einfach über die Befehlszeile weiter.

Die sechs Grundströme

Der stdio -Header stellt sechs spezifische Befehle für die Interaktion mit diesen Streams bereit. Sie sind einfach. Direkt.

  • printf : Schreibt formatierten Text nach stdout.
  • scanf : Liest formatierte Daten von stdin.
  • puts : Gibt einen String auf dem Bildschirm aus.
  • gets : Liest eine Textzeile von der Tastatur.
  • putc : Schreibt ein einzelnes Zeichen nach stdout.
  • getc oder getchar : Liest ein einzelnes Zeichen aus stdin.

Warum diese verwenden? Weil Sie sie umleiten können. Hier glänzt C. Sie müssen Ihren Code nicht ändern, um aus einer Datei statt über eine Tastatur zu lesen. Sie ändern einfach den Befehl, den Sie im Terminal eingeben.

Zeichen zählen auf einfache Weise

Schauen wir uns ein praktisches Beispiel an. Stellen Sie sich vor, Sie möchten ein Programm, das die Gesamtzahl der Zeichen in einer Texteingabe zählt. Hier ist der Code:

„c

void main() {
char s[1000];
int count = 0;
while (bekommt(s))
count += strlen(s);
printf(“%d\n”, count);
}

Dieser Code wartet auf Eingabe. Sie geben Zeilen ein. Wenn Sie fertig sind, drücken Sie STRG-D. Dies signalisiert das Ende der Datei (eof ). Die Funktion gets gibt Null zurück, wenn sie auf eof trifft, wodurch die Schleife unterbrochen wird. Die endgültige Zählung wird auf dem Bildschirm gedruckt.

Aber hier ist der Trick. Sie mussten den Code nicht bearbeiten, um Zeichen in einer Datei zu zählen. Sie haben der Shell gerade eine kleine Anweisung hinzugefügt.

Eingabe und Ausgabe umleiten

Wenn Sie dieses Programm in eine ausführbare Datei mit dem Namen xxx kompiliert haben, können Sie ihm eine Datei zuführen.

„Bash
xxx < Dateiname „

Die spitze Klammer leitet den Inhalt von Dateiname in stdin um. Das Programm geht davon aus, dass es von der Tastatur liest. Das ist es nicht. Es liest von der Festplatte.

Sie können auch Rohre verwenden. Dadurch wird die Ausgabe eines Befehls direkt an einen anderen übergeben.

„Bash
cat-Dateiname | xxx

Das ist das gleiche Ergebnis. cat speichert die Datei in der Standardausgabe. Die Pipe sendet es an Ihr Programm.

Sie können die Ausgabe auch umleiten. Anstatt die Zählung auf Ihrem Bildschirm zu sehen, können Sie sie speichern.

„Bash
xxx aus

Jetzt liest xxx aus Dateiname und schreibt das Ergebnis in eine neue Textdatei namens out. Das ist mächtig. Sie können damit Tools miteinander verketten, ohne zusätzlichen Code für die Verarbeitung von Dateizeigern schreiben zu müssen.

Wenn Streams nicht ausreichen

Manchmal reicht eine Umleitung nicht aus. Möglicherweise müssen Sie mehrere Dateien gleichzeitig öffnen. Möglicherweise erstellen Sie einen Texteditor, der Konfigurationsdateien speichert. Möglicherweise müssen Sie überprüfen, ob Sie das Ende einer Datei ohne Absturz erreicht haben.

In diesen Fällen benötigen Sie direkte Dateifunktionen. Diese gibt es auch in stdio, aber sie arbeiten mit Dateizeigern und nicht mit Standard-Streams.

  • fopen : Öffnet eine Datei zum Lesen oder Schreiben.
  • fclose : Schließt die Datei, wenn Sie fertig sind.
  • feof : Überprüft, ob Sie das Ende der Datei erreicht haben.
  • fprintf : Schreibt formatierte Daten in eine bestimmte Datei.
  • fscanf : Liest formatierte Daten aus einer bestimmten Datei.
  • fputs : Schreibt einen String in eine Datei.
  • fgets : Liest eine Zeile aus einer Datei.
  • fputc : Schreibt ein Zeichen in eine Datei.
  • fgetc : Liest ein Zeichen aus einer Datei.

Diese Funktionen geben Ihnen mehr Kontrolle. Sie können mehrere Streams gleichzeitig verwalten. Sie können genau entscheiden, welche Datei welche Daten erhält.

Welchen Weg gehst du? Die Einfachheit der stdin -Umleitung oder die Steuerung direkter Dateizeiger? Es hängt davon ab, was Sie bauen. Für schnelle Skripte ist die Umleitung das A und O. Für komplexe Anwendungen benötigen Sie die Dateifunktionen.

Es gibt keine perfekte Antwort. Nur Kompromisse.