ungetc
, ungetwc
Nasdílí znak zpět do datového proudu.
Syntaxe
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
Parametry
c
Znak, který se má nasdílit.
stream
Ukazatel na FILE
strukturu.
Vrácená hodnota
V případě úspěchu vrátí každá z těchto funkcí argument znaku c
. Pokud c
nelze nasdílit zpět nebo pokud nebyl načten žádný znak, vstupní datový proud se nezmění a ungetc
vrátí ; vrátí ungetwc
EOF
WEOF
. Pokud stream
je NULL
, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je povoleno pokračovat spuštění nebo EOF
WEOF
je vráceno a errno
je nastavena na EINVAL
.
Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
Poznámky
Funkce ungetc
nasdílí znak c
zpět stream
a vymaže indikátor konce souboru. Stream musí být otevřený pro čtení. Další operace čtení začíná stream
na c
. Pokus o nasdílení změn EOF
do datového proudu pomocí ungetc
se ignoruje.
Znaky umístěné na datovém proudu ungetc
mohou být vymazány, pokud fflush
, fseek
, fsetpos
nebo rewind
je volána před čtením znaku z datového proudu. Indikátor umístění souboru bude mít hodnotu, kterou měla předtím, než byly znaky vráceny zpět. Externí úložiště odpovídající datovému proudu se nezmění. Při úspěšném ungetc
volání textového streamu není indikátor pozice souboru zadán, dokud nebudou přečtené nebo zahozené všechny znaky vložené zpět. Při každém úspěšném ungetc
volání binárního datového proudu se indikátor pozice souboru dekrementuje. Pokud hodnota byla před voláním 0, hodnota není po volání definována.
Výsledky jsou nepředvídatelné, pokud ungetc
se volá dvakrát bez operace umístění čtení nebo souboru mezi těmito dvěma voláními. Po volání fscanf
může volání ungetc
selhat, pokud nebyla provedena jiná operace čtení (například getc
) , protože fscanf
samotná volání ungetc
.
ungetwc
je širokoznační verze .ungetc
Při každém úspěšném ungetwc
volání textového nebo binárního datového proudu se však hodnota indikátoru pozice souboru nezadá, dokud nebudou všechny znaky nasdílené zpět přečtené nebo zahozené.
Tyto funkce jsou bezpečné pro přístup z více vláken a během provádění zamknout citlivá data. Informace o nezamykání verze naleznete v tématu _ungetc_nolock
, _ungetwc_nolock
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
Rutina TCHAR.H | _UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_ungettc |
ungetc |
ungetc |
ungetwc |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
ungetc |
<stdio.h> |
ungetwc |
<stdio.h> nebo <wchar.h> |
Konzola není podporována v aplikacích pro Univerzální platforma Windows (UPW). Standardní zpracování datových proudů, které jsou přidružené ke konzole , a , stderr
musí být přesměrovány před tím, stdin
stdout
než je funkce runtime jazyka C mohou používat v aplikacích pro UPW. Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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'