scanf
genişlik belirtimi
Bu bilgiler, gibi scanf_s
güvenli sürümler de dahil olmak üzere işlev ailesindeki scanf
biçim dizelerinin yorumlanması için geçerlidir. Bu işlevler normalde giriş akışının bir belirteç dizisine ayrıldığını varsayar. Belirteçler boşlukla (boşluk, sekme veya yeni satır) veya sayısal türler için, sayısal metne dönüştürülemez ilk karakterde gösterildiği gibi sayısal veri türünün doğal ucuyla ayrılır. Ancak genişlik belirtimi, girişin ayrıştırmasının bir belirtecin doğal sonundan önce durmasına neden olmak için kullanılabilir.
Belirtimwidth
, alan olarak adlandırılan width
pozitif bir tamsayı ve alanın boyutunu gösteren bir veya daha fazla karakter içerebilen ve alan türünün değiştiricisi olarak da kabul edilebilen ve tamsayı türünün short
veya long
olup olmadığının göstergesi gibi, ile tür alanı tanımlayıcısı arasındaki %
karakterlerden oluşur. Bu tür karakterler boyut ön eki olarak adlandırılır.
Alanı width
Alan width
, bu alan için okunacak en fazla karakter sayısını denetleen pozitif bir ondalık tamsayıdır. En fazla width
karakterler dönüştürülür ve ilgili argument
içinde depolanır. Verilen biçime göre dönüştürülemez bir boşluk karakterine veya karaktere ulaşılmadan önce width
gerçekleşirse, karakterden daha width
az karakter okunabilir.
Genişlik belirtimi, bu işlevlerin güvenli sürümleri (örneğin, scanf_s
, wscanf_s
vb.) için gereken arabellek boyutu bağımsız değişkeninden ayrı ve farklıdır. Aşağıdaki örnekte genişlik belirtimi 20'dir ve giriş akışından en fazla 20 karakterin okunmasını belirtir. Arabellek uzunluğu 21'dir ve bu, olası 20 karakter ve null sonlandırıcı için yer içerir:
char str[21];
scanf_s("%20s", str, 21);
width
Alan kullanılmıyorsa, scanf_s
belirtecin tamamını dizeye okumaya çalışır. Belirtilen boyut belirtecin tamamını barındıracak kadar büyük değilse hedef dizeye hiçbir şey yazılamaz. width
Alan belirtilirse, belirteçteki ilk width
karakterler null sonlandırıcıyla birlikte hedef dizeye yazılır.
Boyut ön eki
İsteğe bağlı , , hh
l
, ll
, ve I64
ön ekleri h
ve L
boyutunu argument
gösterir (değiştirdikleri tür karakterine bağlı olarak uzun veya kısa, tek baytlık karakter veya geniş karakter). Bu biçim belirtimi karakterleri, aşağıdaki tabloda gösterildiği gibi bağımsız değişkenlerin yorumlanmasını belirtmek için veya wscanf
işlevlerindeki tür karakterleriyle scanf
birlikte kullanılır. Tür ön eki I64
bir Microsoft uzantısıdır ve Standart C ile uyumlu değildir. Tür karakterleri ve anlamları, tür alanı karakterlerinin "Scanf işlevleri için Tür Karakterleri" tablosunda scanf
açıklanmıştır.
Not
h
, l
ve L
ön ekleri, türündeki char
verilerle kullanıldığında Microsoft uzantılarıdır.
ve wscanf
biçim türü tanımlayıcıları için scanf
boyut ön ekleri
Belirtmek için | Ön ek kullan | Tür tanımlayıcısı ile |
---|---|---|
double |
l |
e , E , f , g veya G |
long double (ile aynı double ) |
L |
e , E , f , g veya G |
long int |
l |
d , i , o , x veya X |
long unsigned int |
l |
u |
long long |
ll |
d , i , o , x veya X |
short int |
h |
d , i , o , x veya X |
short unsigned int |
h |
u |
char |
hh |
d , i , o , x veya X |
unsigned char |
hh |
u |
int64 |
I64 |
d , i , o , u , , x veya X |
ile tek baytlık karakter scanf |
h |
c veya C |
ile tek baytlık karakter wscanf |
h |
c veya C |
ile geniş karakter scanf |
l |
c veya C |
ile geniş karakter wscanf |
l |
c veya C |
ile tek baytlık karakter dizesi scanf |
h |
s veya S |
ile tek baytlık karakter dizesi wscanf |
h |
s veya S |
ile geniş karakter dizesi scanf |
l |
s veya S |
ile geniş karakter dizesi wscanf |
l |
s veya S |
Aşağıdaki örneklerde ve işlevleri ve wscanf_s
işlevleri kullanılır:h
scanf_s
l
scanf_s("%ls", &x, 2); // Read a wide-character string
wscanf_s(L"%hC", &x, 2); // Read a single-byte character
Ailede scanf
güvenli olmayan bir işlev kullanıyorsanız, önceki bağımsız değişkenin arabellek uzunluğunu gösteren boyut parametresini atlar.
Etkilenmemiş dizeleri okuma
Boşluk karakterleriyle sınırlandırılmayan dizeleri okumak için, köşeli ayraç ([ ]
) içindeki bir karakter kümesi (dize) türü karakteriyle s
değiştirilebilir. Köşeli ayraç içindeki karakter kümesi denetim dizesi olarak adlandırılır. Karşılık gelen giriş alanı, denetim dizesinde görünmeyen ilk karaktere kadar okunur. Kümedeki ilk karakter bir şapka işareti ()^
ise, efekt tersine çevrilir: Giriş alanı, karakter kümesinin geri kalanında görünen ilk karaktere kadar okunur.
hem hem %[z-a]
de %[a-z]
ile eşdeğer %[abcde...z]
olarak yorumlanır. Bu yaygın scanf
bir işlev uzantısıdır, ancak Standart C için gerekli değildir.
Sonlandırılmamış dizeleri okuma
Bir dizeyi sonlandırıcı null karakter ('\0') depolamadan depolamak için belirtimini %Nc
kullanın; burada N ondalık tamsayıdır. Bu durumda, c
tür karakteri bağımsız değişkenin bir karakter dizisinin işaretçisi olduğunu gösterir. Sonraki N karakterleri giriş akışından belirtilen konuma okunur ve null karakter ('\0') eklenmez. N belirtilmezse, varsayılan değeri 1'dir.
Bir alanı okumayı durdurduğunda scanf
İşlev scanf
her giriş alanını karakter karakter tarar. Belirli bir giriş alanını, çeşitli nedenlerden biri nedeniyle boşluk karakterine ulaşmadan önce okumayı durdurabilir:
Belirtilen genişliğe ulaşıldı.
Sonraki karakter belirtildiği gibi dönüştürülemez.
Sonraki karakter, eşleşmesi gereken denetim dizesindeki bir karakterle çakışır.
Sonraki karakter belirli bir karakter kümesinde görünemiyor.
Ne olursa olsun, işlev bir giriş alanını okumayı durdurduğunda scanf
, sonraki giriş alanı ilk okunmamış karakterden başlayacak şekilde kabul edilir. Çakışan karakter (varsa) okunmamış olarak kabul edilir. Bu, sonraki giriş alanının ilk karakteri veya giriş akışındaki sonraki okuma işlemlerinde ilk karakterdir.
Ayrıca bkz.
scanf
, _scanf_l
, wscanf
, _wscanf_l
scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
Biçim belirtimi alanları: scanf
ve wscanf
işlevleri
scanf
tür alanı karakterleri