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 NULLannimmt, 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 fscanfungetc fehlschlagen, es sei denn, ein anderer Lesevorgang (zgetc. B. ) wurde ausgeführt, da fscanf selbst Aufrufe ungetcausgefü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'

Siehe auch

Stream-E/A
getc, getwc
putc, putwc