Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Informasi ini berlaku untuk interpretasi string format dalam scanf
keluarga fungsi, termasuk versi aman seperti scanf_s
. Fungsi-fungsi ini biasanya mengasumsikan aliran input dibagi menjadi urutan token. Token dipisahkan oleh spasi kosong (spasi, tab, atau baris baru), atau untuk jenis numerik, dengan akhir alami tipe data numerik seperti yang ditunjukkan oleh karakter pertama yang tidak dapat dikonversi menjadi teks numerik. Namun, spesifikasi lebar dapat digunakan untuk menyebabkan penguraian input berhenti sebelum akhir alami token.
width
Spesifikasi terdiri dari karakter antara %
dan penentu bidang jenis, yang dapat mencakup bilangan bulat positif yang disebut width
bidang dan satu atau beberapa karakter yang menunjukkan ukuran bidang, yang juga dapat dianggap sebagai pengubah jenis bidang, seperti indikasi apakah jenis bilangan bulat adalah short
atau long
. Karakter tersebut disebut sebagai awalan ukuran.
Bidang width
Bidang width
adalah bilangan bulat desimal positif yang mengontrol jumlah maksimum karakter yang akan dibaca untuk bidang tersebut. Tidak lebih dari width
karakter dikonversi dan disimpan dalam yang sesuai argument
. Kurang dari width
karakter dapat dibaca jika karakter spasi kosong atau karakter yang tidak dapat dikonversi sesuai dengan format yang diberikan terjadi sebelum width
tercapai.
Spesifikasi lebar terpisah dan berbeda dari argumen ukuran buffer yang diperlukan oleh versi aman fungsi-fungsi ini (misalnya, scanf_s
, wscanf_s
, dan sebagainya). Dalam contoh berikut, spesifikasi lebar adalah 20, menunjukkan bahwa hingga 20 karakter akan dibaca dari aliran input. Panjang buffer adalah 21, yang mencakup ruang untuk kemungkinan 20 karakter ditambah terminator null:
char str[21];
scanf_s("%20s", str, 21);
width
Jika bidang tidak digunakan, scanf_s
upaya untuk membaca seluruh token ke dalam string. Jika ukuran yang ditentukan tidak cukup besar untuk menahan seluruh token, tidak ada yang ditulis ke string tujuan. width
Jika bidang ditentukan, maka karakter pertama width
dalam token akan ditulis ke string tujuan, bersama dengan terminator null.
Awalan ukuran
Awalan h
opsional , , hh
, l
ll
, I64
, , dan L
menunjukkan ukuran argument
(karakter byte tunggal atau karakter lebar yang panjang atau pendek, tergantung pada karakter jenis yang mereka ubah). Karakter spesifikasi format ini digunakan dengan karakter jenis dalam scanf
atau wscanf
fungsi untuk menentukan interpretasi argumen seperti yang ditunjukkan dalam tabel berikut. Awalan I64
jenis adalah ekstensi Microsoft dan tidak kompatibel dengan Standard C. Karakter jenis dan maknanya dijelaskan dalam tabel "Ketik Karakter untuk fungsi pemindaian" dalam scanf
jenis karakter bidang.
Catatan
h
Awalan , l
, dan L
adalah ekstensi Microsoft saat digunakan dengan data jenis char
.
Prefiks ukuran untuk scanf
penentu jenis format dan wscanf
Untuk menentukan | Gunakan awalan | Dengan penentu tipe |
---|---|---|
double |
l |
e , E , f , g , atau G |
long double (sama seperti double ) |
L |
e , E , f , g , atau G |
long int |
l |
d , i , o , x , atau X |
long unsigned int |
l |
u |
long long |
ll |
d , i , o , x , atau X |
short int |
h |
d , i , o , x , atau X |
short unsigned int |
h |
u |
char |
hh |
d , i , o , x , atau X |
unsigned char |
hh |
u |
int64 |
I64 |
d , i , o , u , x , atau X |
Karakter byte tunggal dengan scanf |
h |
c atau C |
Karakter byte tunggal dengan wscanf |
h |
c atau C |
Karakter lebar dengan scanf |
l |
c atau C |
Karakter lebar dengan wscanf |
l |
c , atau C |
String karakter byte tunggal dengan scanf |
h |
s atau S |
String karakter byte tunggal dengan wscanf |
h |
s atau S |
String karakter lebar dengan scanf |
l |
s atau S |
String karakter lebar dengan wscanf |
l |
s atau S |
Contoh berikut menggunakan h
dan l
dengan scanf_s
fungsi dan wscanf_s
fungsi:
scanf_s("%ls", &x, 2); // Read a wide-character string
wscanf_s(L"%hC", &x, 2); // Read a single-byte character
Jika menggunakan fungsi yang tidak aman dalam scanf
keluarga, hilangkan parameter ukuran yang menunjukkan panjang buffer argumen sebelumnya.
Membaca string yang tidak dibatasi
Untuk membaca string yang tidak dibatasi oleh karakter spasi kosong, sekumpulan karakter dalam tanda kurung ([ ]
) dapat digantikan untuk s
karakter jenis (string). Kumpulan karakter dalam tanda kurung disebut sebagai string kontrol. Bidang input yang sesuai dibaca hingga karakter pertama yang tidak muncul dalam string kontrol. Jika karakter pertama dalam set adalah tanda sisipan (^
), efeknya dibalik: Bidang input dibaca hingga karakter pertama yang muncul di sisa kumpulan karakter.
Keduanya %[a-z]
dan %[z-a]
ditafsirkan setara dengan %[abcde...z]
. Ini adalah ekstensi fungsi umum scanf
, tetapi tidak diperlukan oleh Standard C.
Membaca string yang tidak ditentukan
Untuk menyimpan string tanpa menyimpan karakter null yang mengakhiri ('\0'), gunakan spesifikasi %Nc
, di mana N adalah bilangan bulat desimal. Dalam hal ini, c
karakter jenis menunjukkan bahwa argumen adalah penunjuk ke array karakter. Karakter N berikutnya dibaca dari aliran input ke lokasi yang ditentukan, dan tidak ada karakter null ('\0') yang ditambahkan. Jika N tidak ditentukan, nilai defaultnya adalah 1.
Saat scanf
berhenti membaca bidang
Fungsi scanf
ini memindai setiap bidang input, karakter menurut karakter. Ini mungkin berhenti membaca bidang input tertentu sebelum mencapai karakter spasi karena salah satu dari beberapa alasan:
Lebar yang ditentukan telah tercapai.
Karakter berikutnya tidak dapat dikonversi seperti yang ditentukan.
Karakter berikutnya berkonflik dengan karakter dalam string kontrol yang seharusnya cocok.
Karakter berikutnya gagal muncul dalam kumpulan karakter tertentu.
Untuk alasan apa pun, ketika scanf
fungsi berhenti membaca bidang input, bidang input berikutnya dianggap dimulai pada karakter pertama yang belum dibaca. Karakter yang bertentangan, jika ada, dianggap belum dibaca. Ini adalah karakter pertama dari bidang input berikutnya, atau karakter pertama dalam operasi baca berikutnya pada aliran input.
Lihat juga
scanf
, , _scanf_l
wscanf
,_wscanf_l
scanf_s
, , _scanf_s_l
wscanf_s
,_wscanf_s_l
Bidang spesifikasi format: scanf
dan wscanf
fungsi
scanf
ketik karakter bidang