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 c
znaku . 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ść EOF
WEOF
. Jeśli stream
parametr ma NULL
wartość , 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 EINVAL
wartość .
Aby uzyskać informacje na temat tych i innych kodów błędów, zobacz errno
, _doserrno
, _sys_errlist
i _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 fflush
znak , fseek
fsetpos
, 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 fscanf
wywołanie metody może zakończyć się niepowodzeniem ungetc
, chyba że wykonano inną operację odczytu (np getc
. ) z powodu fscanf
wywołania ungetc
metody .
ungetwc
jest 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 zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_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
, stdout
i i stderr
muszą 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'