Share via


ungetc, ungetwc

Mendorong kembali karakter ke aliran.

Sintaks

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

Parameter

c
Karakter yang akan didorong.

stream
Penunjuk ke FILE struktur.

Nilai hasil

Jika berhasil, masing-masing fungsi ini mengembalikan argumen ckarakter . Jika c tidak dapat didorong kembali atau jika tidak ada karakter yang dibaca, aliran input tidak berubah dan ungetc mengembalikan EOF; ungetwc mengembalikan WEOF. Jika stream adalah NULL, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, EOF atau WEOF dikembalikan, dan errno diatur ke EINVAL.

Untuk informasi tentang kode kesalahan ini dan lainnya, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Keterangan

Fungsi ini ungetc mendorong karakter c kembali ke stream dan menghapus indikator akhir file. Aliran harus terbuka untuk dibaca. Operasi baca berikutnya dimulai stream dengan c. Upaya untuk mendorong EOF ke aliran menggunakan ungetc diabaikan.

Karakter yang ditempatkan pada aliran oleh ungetc dapat dihapus jika fflush, , fseek, fsetposatau rewind dipanggil sebelum karakter dibaca dari aliran. Indikator posisi file akan memiliki nilai sebelum karakter didorong kembali. Penyimpanan eksternal yang sesuai dengan aliran tidak berubah. Pada panggilan yang berhasil ungetc terhadap aliran teks, indikator posisi file tidak ditentukan hingga semua karakter yang didorong kembali dibaca atau dibuang. Pada setiap panggilan yang berhasil ungetc terhadap aliran biner, indikator posisi file dikurangi; jika nilainya adalah 0 sebelum panggilan, nilainya tidak ditentukan setelah panggilan.

Hasil tidak dapat diprediksi jika ungetc dipanggil dua kali tanpa operasi baca atau posisi file antara dua panggilan. Setelah panggilan ke fscanf, panggilan ke ungetc mungkin gagal kecuali operasi baca lain (seperti getc) telah dilakukan, karena fscanf panggilan itu ungetcsendiri .

ungetwc adalah versi karakter luas dari ungetc. Namun, pada setiap panggilan yang berhasil ungetwc terhadap teks atau aliran biner, nilai indikator posisi file tidak ditentukan sampai semua karakter yang didorong kembali dibaca atau dibuang.

Fungsi-fungsi ini aman utas dan mengunci data sensitif selama eksekusi. Untuk versi non-penguncian, lihat _ungetc_nolock, _ungetwc_nolock.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Pemetaan rutin teks generik

TCHAR. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_ungettc ungetc ungetc ungetwc

Persyaratan

Rutin Header yang diperlukan
ungetc <stdio.h>
ungetwc <stdio.h> atau <wchar.h>

Konsol tidak didukung di aplikasi Platform Windows Universal (UWP). Handel aliran standar yang terkait dengan konsol, , stdin, stdoutdan stderr, harus dialihkan sebelum fungsi run-time C dapat menggunakannya di aplikasi UWP. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

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

Baca juga

Streaming I/O
getc, getwc
putc, putwc