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 Erfolg gibt jede dieser Funktionen das Zeichenargument c
zurück. Wenn c
nicht zurückgepusht werden kann oder wenn kein Zeichen gelesen wurde, bleibt der Eingabestream unverändert und ungetc
gibt EOF
zurück. ungetwc
gibt WEOF
zurück. Wenn stream
den Wert NULL
annimmt, wird der Handler für ungültige Parameter aufgerufen, wie in Parameter Validation. Wenn die Ausführung fortgesetzt EOF
werden darf oder WEOF
zurückgegeben wird und errno
auf .EINVAL
Weitere Informationen zu diesen und anderen Fehlercodes finden Sie unter errno
, _doserrno
, _sys_errlist
und _sys_nerr
.
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. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Mapping generischer Textroutinen
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 UWP-Apps (Universelle Windows-Plattform) nicht unterstützt. Die mit der Konsole verknüpften Standardstreamhandles stdin
, stdout
und stderr
müssen umgeleitet werden, bevor sie von C-Laufzeitfunktionen in UWP-Apps verwendet werden 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'