Freigeben über


ungetc, ungetwc

Schiebt ein Zeichen zurück auf den Stream.

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ückgeschoben 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 ungültige Parameterhandler, wie in Parametervalidierung beschrieben, aufgerufen. Wenn die weitere Ausführung zugelassen wird, wird EOF oder WEOF zurückgegeben und errno auf EINVAL festgelegt.

Weitere Informationen über diese und andere Fehlercodes finden Sie unter _doserrno, errno, _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 späterer Lesevorgang auf 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 von fscanf kann ein Aufruf von ungetc fehlschlagen, solange kein anderer Lesevorgang (wie getc) ausgeführt wird. Der Grund hierfür ist, dass fscanf selbst ungetc aufruft.

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 threadsichere und sperrabhängige Daten. Eine nicht sperrende Version finden Sie unter _ungetc_nolock, _ungetwc_nolock.

Zuordnung generischer Textroutinen

TCHAR.H-Routine

_UNICODE & _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 Windows Store-Apps nicht unterstützt. Die mit der Konsole verknüpften Standardstreamhandles, stdin, stdout und stderr, müssen umgeleitet werden, bevor sie von C-Laufzeitfunktionen in Windows Store-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() );
}
  

.NET Framework-Entsprechung

Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Stream-E/A

getc, getwc

putc, putwc