Sdílet prostřednictvím


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í ungetwcEOFWEOF. 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 EOFWEOF 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_doserrnoerrno

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, fsetposnebo 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í fscanfmůže volání ungetc selhat, pokud nebyla provedena jiná operace čtení (například getc) , protože fscanf samotná volání ungetc.

ungetwcje š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 Definovány _UNICODE Definovány
_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 , stderrmusí být přesměrovány před tím, stdinstdoutnež 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'

Viz také

Vstupně-výstupní operace streamu
getc, getwc
putc, putwc