Heim >Backend-Entwicklung >C++ >Wie können Sie ein End-of-File-Signal (EOF) im Standard-Eingabestream (stdin) simulieren, wenn dieser sich im interaktiven Modus befindet?

Wie können Sie ein End-of-File-Signal (EOF) im Standard-Eingabestream (stdin) simulieren, wenn dieser sich im interaktiven Modus befindet?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 02:48:29820Durchsuche

How can you simulate an End of File (EOF) signal in the Standard Input stream (stdin) when it's in interactive mode?

Ende der Datei (EOF) des Standard-Eingabestreams (stdin)

Bei der Verwendung von stdin als Eingabequelle für Programme ist es selbstverständlich, dass Ich frage mich, ob es eine End-of-File-Anzeige (EOF) unterstützt. Die Art der Standardeingabe variiert je nach Konfiguration.

stdin mit Eingabe aus einer Datei

Wenn stdin von einer Datei umgeleitet wird, weist es von Natur aus einen EOF auf markieren, ähnlich wie bei regulären Dateistreams. Dies liegt daran, dass Dateien einen definierten Endpunkt haben und wenn der Lesevorgang das Ende der Datei erreicht, tritt die EOF-Bedingung auf.

stdin von der Konsole

Allerdings , Standardeingaben von der Konsole, bekannt als interaktiver Modus, verfügen von Natur aus nicht über einen EOF-Indikator. Dies liegt daran, dass Konsoleneingaben normalerweise ein kontinuierlicher Strom von Zeichen sind, die vom Benutzer eingegeben werden.

Simulieren von EOF im Konsolenmodus

Um ein EOF im Konsolenmodus zu simulieren, müssen Plattform- Es können bestimmte Tastenkombinationen verwendet werden:

  • Unix-basierte Systeme: Strg D
  • Windows-Systeme: Strg Z

Beim Drücken dieser Tastenkombinationen wird die Das Programm behandelte es, als ob die Eingabe ihr Ende erreicht hätte.

Manuelles Hinzufügen von EOF zu stdin

Wie bereits erwähnt, wird stdin von der Konsole als unendlicher Stream betrachtet. Um ein EOF manuell hinzuzufügen, muss der Benutzer es explizit mit den Tastenkombinationen Strg D oder Strg Z angeben.

Lösung mit fread- oder read-Funktionen

Im bereitgestellten Code Beispiel mit fread oder read, die Schleife wird auf unbestimmte Zeit fortgesetzt, bis EOF auftritt. Um in diesem Szenario manuell eine EOF-Bedingung hinzuzufügen, verwenden Sie den folgenden Ansatz:

<br>int c;<br>while ((c = read(0, buffer, BUFSIZ)) > 0) {</p>
<pre class="brush:php;toolbar:false">// Read and process data from stdin

}

// Wenn Strg D oder Strg Z gedrückt wird, ist c -1, was EOF anzeigt
if (c == -1) {

// Handle EOF condition

}

Auf diese Weise kann die Schleife beendet werden, wenn der Benutzer die EOF-Kombination drückt, sodass das Programm das Ende der Eingabe entsprechend behandeln kann.

Das obige ist der detaillierte Inhalt vonWie können Sie ein End-of-File-Signal (EOF) im Standard-Eingabestream (stdin) simulieren, wenn dieser sich im interaktiven Modus befindet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn