ungetc
, ungetwc
Schiebt ein Zeichen zurück auf den Stream.
Syntax
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
Parameter
c
Zu verschiebendes Zeichen.
stream
Zeiger zur FILE
-Struktur.
Rückgabewert
Bei erfolgreicher Ausführung gibt jede dieser Funktionen das Zeichenargument c
zurück. Wenn c
nicht zurückgerückt werden kann oder kein Zeichen gelesen wurde, ist der Eingabedatenstrom unverändert und ungetc
gibt ; ungetwc
gibt EOF
zurückWEOF
. Ist stream
dies NULL
der Fehler, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt EOF
werden darf oder WEOF
zurückgegeben wird und errno
auf .EINVAL
Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Die ungetc
-Funktion schiebt das Zeichen c
wieder auf stream
und löscht den Dateiendeindikator. Der Stream muss zum Lesen geöffnet sein. Ein nachfolgender Lesevorgang stream
beginnt mit c
. Ein Versuch, EOF
mit ungetc
auf den Stream zu schieben, wird ignoriert.
Zeichen, die durch ungetc
auf dem Stream platziert wurden, werden möglicherweise gelöscht, wenn fflush
, fseek
, fsetpos
oder rewind
aufgerufen wird, bevor das Zeichen vom Stream gelesen wird. Der Dateipositionszeiger erhält den Wert, den er auch schon hatte, bevor die Zeichen zurückgeschoben wurden. Der dem Stream entsprechende externe Speicher ist unverändert. Bei einem erfolgreichen ungetc
-Aufruf für einen Textstream bleibt der Dateipositionszeiger so lange nicht angegeben, bis alle zurückgeschobenen Zeichen gelesen oder verworfen wurden. Bei jedem erfolgreichen ungetc
-Aufruf für einen Binärstream wird der Dateipositionszeiger verringert. War sein Wert vor einem Aufruf 0 (null), ist er nach dem Aufruf nicht definiert.
Ergebnisse sind unvorhersehbar, wenn ungetc
zwischen den beiden Aufrufen zweimal ohne einen Lesevorgang oder einen Dateipositionierungsvorgang aufgerufen wird. Nach einem Aufruf kann ein Aufruf fscanf
ungetc
fehlschlagen, es sei denn, ein anderer Lesevorgang (zgetc
. B. ) wurde ausgeführt, da fscanf
selbst Aufrufe ungetc
ausgeführt wurden.
ungetwc
ist eine Breitzeichenversion von ungetc
. Bei jedem erfolgreichen ungetwc
-Aufruf für einen Textstream oder Binärstream bleibt der Dateipositionszeiger jedoch so lange nicht angegeben, bis alle zurückgeschobenen Zeichen gelesen oder verworfen wurden.
Diese Funktionen sind während der Ausführung threadsicher und sperrabhängige Daten. Eine nicht sperrende Version finden Sie unter _ungetc_nolock
, _ungetwc_nolock
.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.
Generische Textroutinzuordnungen
TCHAR.H-Routine | _UNICODE und _MBCS nicht definiert |
_MBCS Definiert |
_UNICODE Definiert |
---|---|---|---|
_ungettc |
ungetc |
ungetc |
ungetwc |
Anforderungen
Routine | Erforderlicher Header |
---|---|
ungetc |
<stdio.h> |
ungetwc |
<stdio.h> oder <wchar.h> |
Die Konsole wird in Universelle Windows-Plattform -Apps (UWP) nicht unterstützt. Die Standardstreamhandles, die der Konsole zugeordnet sind, stdin
stdout
und stderr
müssen umgeleitet werden, bevor C-Laufzeitfunktionen sie in UWP-Apps verwenden können. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_ungetc.c
// This program first converts a character
// representation of an unsigned integer to an integer. If
// the program encounters a character that is not a digit,
// the program uses ungetc to replace it in the stream.
//
#include <stdio.h>
#include <ctype.h>
int main( void )
{
int ch;
int result = 0;
// Read in and convert number:
while( ((ch = getchar()) != EOF) && isdigit( ch ) )
result = result * 10 + ch - '0'; // Use digit.
if( ch != EOF )
ungetc( ch, stdin ); // Put nondigit back.
printf( "Number = %d\nNext character in stream = '%c'",
result, getchar() );
}
521aNumber = 521
Next character in stream = 'a'
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für