Bagikan melalui


scanf, , _scanf_lwscanf,_wscanf_l

Membaca data yang diformat dari aliran input standar. Versi yang lebih aman dari fungsi-fungsi ini tersedia; lihat scanf_s, _scanf_s_l, wscanf_s, . _wscanf_s_l

Catatan

Di Visual Studio 2015 Dan printf scanf keluarga fungsi dinyatakan sebagai inline dan dipindahkan ke <stdio.h> header dan <conio.h> . Jika Anda memigrasikan kode lama, Anda mungkin melihat Kesalahan Linker LNK2019 sehubungan dengan fungsi-fungsi ini. Untuk informasi selengkapnya, lihat Riwayat perubahan Visual C++ 2003 - 2015.

Sintaks

int scanf(
   const char *format [,
   argument]...
);
int _scanf_l(
   const char *format,
   _locale_t locale [,
   argument]...
);
int wscanf(
   const wchar_t *format [,
   argument]...
);
int _wscanf_l(
   const wchar_t *format,
   _locale_t locale [,
   argument]...
);

Parameter

format
Format string kontrol.

argument
Argumen opsional.

locale
Lokal yang akan digunakan.

Nilai hasil

Mengembalikan jumlah bidang yang berhasil dikonversi dan ditetapkan; nilai pengembalian tidak menyertakan bidang yang dibaca tetapi tidak ditetapkan. Nilai pengembalian 0 menunjukkan bahwa tidak ada bidang yang ditetapkan.

Jika format adalah NULL penunjuk, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini kembali EOF dan diatur errno ke EINVAL.

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

Keterangan

Fungsi ini scanf membaca data dari aliran stdin input standar dan menulis data ke lokasi yang diberikan oleh argument. Masing-masing argument harus menjadi penunjuk ke variabel jenis yang sesuai dengan penentu jenis di format. Jika penyalinan terjadi di antara string yang tumpang tindih, perilaku tidak terdefinisi.

Penting

Saat membaca string dengan scanf, selalu tentukan lebar untuk %s format (misalnya, %32s alih-alih %s); jika tidak, input yang diformat dengan tidak benar dapat dengan mudah menyebabkan buffer diserbu. Secara bergantian, pertimbangkan untuk menggunakan , , _scanf_s_lwscanf_s, _wscanf_s_l atau fgets.scanf_s

wscanf adalah versi karakter luas dari scanf; format argumen ke wscanf adalah string karakter lebar. wscanf dan scanf bersifat identik jika aliran dibuka dalam mode ANSI. scanf saat ini tidak mendukung input dari aliran UNICODE.

Versi fungsi-fungsi ini dengan _l akhiran identik kecuali mereka menggunakan parameter lokal yang diteruskan alih-alih lokal utas saat ini.

Pemetaan rutin teks generik

TCHAR.H Rutin _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_tscanf scanf scanf wscanf
_tscanf_l _scanf_l _scanf_l _wscanf_l

Untuk informasi selengkapnya, lihat Memformat bidang spesifikasi: scanf dan wscanf fungsi.

Persyaratan

Rutin Header yang diperlukan
scanf, _scanf_l <stdio.h>
wscanf, _wscanf_l <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_scanf.c
// compile with: /W3
// This program uses the scanf and wscanf functions
// to read formatted input.

#include <stdio.h>

int main( void )
{
   int   i, result;
   float fp;
   char  c, s[81];
   wchar_t wc, ws[81];
   result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996
   // Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_s
   printf( "The number of fields input is %d\n", result );
   printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
   result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996
   wprintf( L"The number of fields input is %d\n", result );
   wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

Lihat juga

Dukungan matematika dan titik mengambang
Streaming I/O
Lokal
fscanf, , _fscanf_lfwscanf,_fwscanf_l
printf, , _printf_lwprintf,_wprintf_l
sprintf, , _sprintf_lswprintf, , _swprintf_l,__swprintf_l
sscanf, , _sscanf_lswscanf,_swscanf_l