scanf genişlik belirtimi

Bu bilgiler, gibi scanf_sgü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 longolup 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 argumentiç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_svb.) 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ı , , hhl, ll, ve I64ön ekleri hve 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, lve L ön ekleri, türündeki charverilerle 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, gveya G
long double (ile aynı double) L e, E, f, gveya G
long int l d, i, o, xveya X
long unsigned int l u
long long ll d, i, o, xveya X
short int h d, i, o, xveya X
short unsigned int h u
char hh d, i, o, xveya X
unsigned char hh u
int64 I64 d, i, o, u, , xveya 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 %Nckullanı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