ungetc
, ungetwc
Bir karakteri akışa geri gönderir.
Sözdizimi
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
Parametreler
c
Gönderilecek karakter.
stream
Yapı işaretçisi FILE
.
Dönüş değeri
Başarılı olursa, bu işlevlerin her biri karakter bağımsız değişkenini c
döndürür. Geri gönderilemiyorsa c
veya hiçbir karakter okunmamışsa, giriş akışı değişmez ve ungetc
döndürür EOF
; ungetwc
döndürür WEOF
. ise stream
NULL
, parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam EOF
etmesi için izin verilirse veya WEOF
döndürülürse ve errno
olarak EINVAL
ayarlanırsa.
Bunlar ve diğer hata kodları hakkında bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
ungetc
işlevi karakteri c
geri stream
gönderir ve dosya sonu göstergesini temizler. Akışın okunması için açık olması gerekir. Sonraki bir okuma işlemi stream
ile c
başlar. kullanarak ungetc
akışa gönderme EOF
girişimi yoksayılır.
tarafından akışa ungetc
yerleştirilen karakterler, karakter akıştan okunmadan önce , fseek
, fsetpos
veya rewind
çağrılırsa fflush
silinebilir. Dosya konumu göstergesi, karakterler geri gönderilmeden önce sahip olduğu değere sahip olur. Akışa karşılık gelen dış depolama değişmemiştir. Metin akışına karşı yapılan başarılı ungetc
bir çağrıda, tüm geri gönderilen karakterler okunana veya atılana kadar dosya konumu göstergesi belirtilmez. İkili bir akışa karşı yapılan her başarılı ungetc
çağrıda, dosya konumu göstergesi azalmıştır; değeri bir çağrıdan önce 0 ise, çağrıdan sonra değer tanımlanmamış olur.
İki çağrı arasında okuma veya dosya konumlandırma işlemi olmadan iki kez çağrılırsa ungetc
sonuçlar tahmin edilemez. çağrısından fscanf
sonra, başka bir ungetc
okuma işlemi (örneğin getc
) gerçekleştirilmediği sürece çağrısı başarısız olabilir çünkü fscanf
kendisi öğesini çağırır ungetc
.
ungetwc
, öğesinin geniş karakterli bir sürümüdür ungetc
. Ancak, bir metin veya ikili akışa karşı yapılan her başarılı ungetwc
çağrıda, tüm geri gönderilen karakterler okunana veya atılana kadar dosya konumu göstergesinin değeri belirtilmez.
Bu işlevler iş parçacığı açısından güvenlidir ve yürütme sırasında hassas verileri kilitler. Kilitlenmeyen bir sürüm için bkz _ungetc_nolock
. , _ungetwc_nolock
.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Genel metin yordamı eşlemeleri
TCHAR.H yordamı | _UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_ungettc |
ungetc |
ungetc |
ungetwc |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
ungetc |
<stdio.h> |
ungetwc |
<stdio.h> veya <wchar.h> |
Konsol Evrensel Windows Platformu (UWP) uygulamalarında desteklenmez. C çalışma zamanı işlevlerinin UWP uygulamalarında kullanabilmesi için önce konsolu stdin
, , stdout
ve stderr
ile ilişkilendirilmiş standart akış tanıtıcılarının yeniden yönlendirilmesi gerekir. Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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'