scanf
, , _scanf_l
wscanf
,_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_l
wscanf_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
, stdout
dan 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_l
fwscanf
,_fwscanf_l
printf
, , _printf_l
wprintf
,_wprintf_l
sprintf
, , _sprintf_l
swprintf
, , _swprintf_l
,__swprintf_l
sscanf
, , _sscanf_l
swscanf
,_swscanf_l