ungetc, ungetwc
Posune znak zpět do datového proudu.
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
Parametry
c
Znak k posunutí.stream
Ukazatel na strukturu FILE.
Vrácená hodnota
Pokud je úspěšná, každá z těchto funkcí vrátí argument znaku c*.* Pokud c nemůže být posunut zpět nebo pokud byl znak přečten, není změněn žádná znak vstupního datového proudu a ungetc vrátí EOF; ungetwc vrátí WEOF.Pokud stream je NULL, je vyvolána obslužná rutina neplatného parametru, jak je popsáno v Ověření parametru.Pokud provádění může pokračovat, vrátí se EOF nebo WEOF a errno se nastaví na EINVAL.
Informace o těchto a dalších chybových kódech naleznete v části _doserrno, errno, _sys_errlist, and _sys_nerr.
Poznámky
Funkce ungetc posune znak c zpět do stream a vymaže indikátor konce souboru.Datový proud musí být otevřen pro čtení.Následná operace čtení na stream začíná na c*.* Pokus posunout EOF na datový proud pomocí ungetc je ignorován.
Znaky umístěny v datovém proudu podle 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 pozice v souboru bude mít hodnotu, kterou měl před zpětným posunutím znaků.Externí úložiště odpovídající datovému proudu je beze změny.Při úspěšném volání ungetc proti textovému proudu je indikátor pozice v souboru nespecifikovaný, dokud nejsou všechny znaky posunuté zpět přečteny nebo zahozeny.Po každém úspěšném volání ungetc volání proti binárnímu datovému proudu je indikátor pozice v souboru snížen; pokud byla jeho hodnota 0 před voláním, hodnota je po volání nedefinovaná.
Výsledky jsou nepředvídatelné, pokud ungetc je volána dvakrát bez operace čtení nebo umístění v souboru mezi dvěma voláními.Po volání fscanf, volání ungetc může selhat, pokud jiná operace čtení (například getc) byla provedena.Důvodem je, že fscanf sama volá ungetc.
ungetwc je širokoznaká verze ungetc.Při každém úspěšném volání ungetwc proti textovému nebo binárnímu proudu je však hodnota indikátoru pozice v souboru nespecifikovaná, dokud nejsou všechny znaky posunuté zpět přečteny nebo zahozeny.
Tyto funkce jsou bezpečné na vlákno a zamykají citlivá data při spuštění.Nezamykací verzi naleznete v _ungetc_nolock, _ungetwc_nolock.
Rutinní mapování obecného textu
Rutina TCHAR.H |
_UNICODE & _MBCS není definováno |
_MBCS definováno |
_UNICODE definováno |
---|---|---|---|
_ungettc |
ungetc |
ungetc |
ungetwc |
Požadavky
Rutina |
Požadované záhlaví |
---|---|
ungetc |
<stdio.h> |
ungetwc |
<stdio.h> nebo <wchar.h> |
Konzola není v aplikacích Windows Store podporována.Standardní datový proud popisovačů, které jsou spojeny s konzolou – stdin, stdout a stderr, musí být přesměrován před použitím funkcí jazyka C run-time je v aplikacích Windows Store.Další informace o kompatibilitě naleznete 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() );
}
Ekvivalent v rozhraní .NET Framework
Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.