ungetc, ungetwc

Wypycha znak z powrotem do strumienia.

Składnia

int ungetc(
   int c,
   FILE *stream
);
wint_t ungetwc(
   wint_t c,
   FILE *stream
);

Parametry

c
Znak do wypchnięcia.

stream
Wskaźnik do FILE struktury.

Wartość zwracana

W przypadku powodzenia każda z tych funkcji zwraca argument cznaku . Jeśli c nie można odepchnąć lub jeśli żaden znak nie został odczytany, strumień wejściowy jest niezmieniony i ungetc zwraca wartość ; ungetwc zwraca wartość EOFWEOF. Jeśli stream parametr ma NULLwartość , wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania EOF lub WEOF jest zwracane, i errno jest ustawione na EINVALwartość .

Aby uzyskać informacje na temat tych i innych kodów błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja ungetc wypycha znak c z powrotem do stream i czyści wskaźnik końca pliku. Strumień musi być otwarty do odczytu. Kolejna operacja odczytu rozpoczyna stream się od c. Próba wypchnięcia EOF do strumienia przy użyciu ungetc jest ignorowana.

Znaki umieszczone w strumieniu ungetc mogą zostać wymazane, jeśli fflushznak , fseekfsetpos, lub rewind jest wywoływany przed odczytaniem znaku ze strumienia. Wskaźnik położenia pliku będzie miał wartość, która miała miejsce przed odepchnięciem znaków. Magazyn zewnętrzny odpowiadający strumieniu pozostaje niezmieniony. W przypadku pomyślnego ungetc wywołania strumienia tekstowego wskaźnik położenia pliku jest nieokreślony do momentu odczytania lub odrzucenia wszystkich wypchniętych znaków. W przypadku każdego pomyślnego ungetc wywołania strumienia binarnego wskaźnik pozycji pliku jest dekrementowany. Jeśli jego wartość wynosiła 0 przed wywołaniem, wartość jest niezdefiniowana po wywołaniu.

Wyniki są nieprzewidywalne, jeśli ungetc jest wywoływany dwa razy bez operacji odczytu lub umieszczania plików między dwoma wywołaniami. Po wywołaniu metody fscanfwywołanie metody może zakończyć się niepowodzeniem ungetc , chyba że wykonano inną operację odczytu (np getc. ) z powodu fscanf wywołania ungetcmetody .

ungetwcjest wersją o szerokim znaku .ungetc Jednak przy każdym pomyślnym ungetwc wywołaniu względem strumienia tekstowego lub binarnego wartość wskaźnika pozycji pliku jest nieokreślona do momentu odczytania lub odrzucenia wszystkich wypchniętych znaków.

Te funkcje są bezpieczne wątkowo i blokują poufne dane podczas wykonywania. Aby uzyskać wersję nieblokającą, zobacz _ungetc_nolock_ungetwc_nolock, .

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

Procedura TCHAR.H _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_ungettc ungetc ungetc ungetwc

Wymagania

Procedura Wymagany nagłówek
ungetc <stdio.h>
ungetwc <stdio.h> lub <wchar.h>

Konsola nie jest obsługiwana w aplikacjach platformy platforma uniwersalna systemu Windows (UWP). Standardowe dojścia strumienia skojarzone z konsolą programu stdin, stdouti i stderrmuszą zostać przekierowane, zanim funkcje czasu wykonywania języka C będą mogły ich używać w aplikacjach platformy UWP. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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'

Zobacz też

We/Wy strumienia
getc, getwc
putc, putwc