2024 Yazar: Howard Calhoun | [email protected]. Son düzenleme: 2024-01-17 19:11
Bu makalede, scanf() işlevi belirli bir standarda atıfta bulunulmadan genel bir biçimde ele alınmaktadır, bu nedenle herhangi bir C99, C11, C++11, C++14 standardından gelen veriler buraya dahil edilmiştir. Belki bazı standartlarda işlev, makalede sunulan malzemeden farklılıklarla çalışır.
scanf C işlevi - açıklama
scanf(), biçimlendirilmiş program girişi olarak da bilinen stdio.h(C) ve cstdio(C++) başlık dosyalarında bulunan bir işlevdir. scanf, standart giriş akışından (stdin) karakterleri okur ve bunları biçime göre dönüştürür, ardından belirtilen değişkenlere yazar. Biçim - verilerin alındıktan sonra belirli bir forma dönüştürüldüğü anlamına gelir. Böylece scanf C işlevi açıklanmıştır:
scanf("%format", &variable1[, &variable2, […]), değişkenlerin adres olarak geçirildiği yer. Değişkenleri bir fonksiyona bu şekilde geçirmenin nedeni açıktır: işin sonucu olarak, hataların varlığını gösteren bir değer döndürür, bu nedenledeğişkenlerin değerlerini değiştirmenin tek yolu adresten geçmektir. Ayrıca bu yöntem sayesinde fonksiyon her türden veriyi işleyebilir.
Bazı programcılar, diğer dillerle benzerlikleri nedeniyle scanf() veya printf() gibi işlevlere prosedür olarak atıfta bulunur.
Scanf, tüm temel dil türlerinin girişine izin verir: char, int, float, string, vb. string türündeki değişkenler söz konusu olduğunda, string türündeki değişken bir dizi olduğundan ve adı bilgisayarın belleğindeki dizinin ilk öğesinin adresi olduğundan, adres işaretini - "&" belirtmeye gerek yoktur..
Veri giriş formatı veya kontrol dizisi
Açıklamadan scanf C işlevi örneğine bakarak başlayın.
include int ana() { int x; while (scanf("%d", &x)==1) printf("%d\n", x); 0 döndür; //linux sistemleri için gereksinim }
Giriş biçimi şu dört parametreden oluşur: %[genişlik][değiştiriciler] tür. Bu durumda, "%" işareti ve tür zorunlu parametrelerdir. Yani, minimum biçim şöyle görünür: “%s”, “%d” vb.
Genel olarak, biçim dizesini oluşturan karakterler şu şekilde ayrılır:
- format belirteçleri - % ile başlayan her şey;
- ayırma veya boşluk karakterleri - bunlar boşluk, sekme(t), yeni satır (n);
- boşluk dışındaki karakterler.
İşlev güvenli olmayabilir.
scanf() yerine scanf_s() kullanın.
(Visual Studio'dan mesaj)
Tür veya biçim belirteçleri veya dönüştürme karakterleri veya kontrol karakterleri
A scanf C bildirimi, "%" ile başlayan ifadelerin sonunda belirtilen en az bir biçim belirteci içermelidir. Programa, genellikle klavyeden girerken beklenecek veri türünü söyler. Aşağıdaki tabloda tüm biçim belirteçlerinin listesi.
Tür | Anlam | |
1 | %c | Program bir karakter girişi bekliyor. Yazılacak değişken char. karakter tipinde olmalıdır. |
2 | %d | Program, tamsayı türünde ondalık bir sayının girilmesini bekler. Değişken int türünde olmalıdır. |
3 | %i | Program, tamsayı türünde ondalık bir sayının girilmesini bekler. Değişken int türünde olmalıdır. |
4 | %e, %E | Program, üstel biçimde bir kayan noktalı (virgül) sayı girmeyi bekler. Değişken float türünde olmalıdır. |
5 | %f | Program bir kayan noktalı sayı (virgül) bekler. Değişken float türünde olmalıdır. |
6 | %g, %G | Program bir kayan noktalı sayı (virgül) bekler. Değişken float türünde olmalıdır. |
7 | %a | Program bir kayan noktalı sayı (virgül) bekler. Değişken float türünde olmalıdır. |
8 | %o | Program sekizlik bir sayı bekliyor. Değişken int türünde olmalıdır. |
9 | %s | Program girilecek bir diziyi bekliyor. Bir dize, karşılaşılan ilk ayırıcı karaktere kadar herhangi bir karakter kümesidir. Değişken string türünde olmalıdır. |
10 |
%x, %X | Program on altılık bir sayı bekliyor. Değişken int türünde olmalıdır. |
11 | %p | Değişken, işaretçi girişi bekliyor. Değişken işaretçi türünde olmalıdır. |
12 | %n | Scanf işlevi tarafından o ana kadar okunan karakter sayısına eşit bir tamsayı değeri bir değişkene yazar. |
13 | %u | Program işaretsiz bir tamsayı okur. Değişken türü işaretsiz tamsayı olmalıdır. |
14 | %b | Program bir ikili sayı bekliyor. Değişken int türünde olmalıdır. |
15 | % | Taranmış karakter seti. Program karakterlerin girilmesini bekliyor.köşeli parantezler arasında belirtilen sınırlı havuzdan. scanf, giriş akışında belirtilen kümeden karakterler olduğu sürece çalışacaktır. |
16 | %% | "%"işaretleyin. |
Biçim dizesindeki karakterler
Yıldız sembolü ()
Yıldız (), atama işleminin gizlenmesi gerektiğini belirten bir bayraktır. "%" işaretinden hemen sonra bir yıldız işareti konur. Örneğin,
scanf("%d%c%d", &x, &y); //iki tamsayı arasındaki karakteri yoksay. scanf("%s%d%s", str, str2); //iki dize arasındaki tamsayıyı yoksay.
Yani konsolda "45-20" satırını girerseniz program şunları yapacaktır:
- "x" değişkenine 45 değeri atanacak.
- "y" değişkenine 20 değeri atanacak.
- Ve eksi işareti (tire) "-", "%c" sayesinde yok sayılır.
Genişlik (veya alan genişliği)
Bu, "%" işareti ile geçerli okuma işleminde okunacak maksimum karakter sayısını belirten biçim belirteci arasında bir tamsayıdır.
scanf("%20s", str); //giriş akışındaki ilk 20 karakteri oku
Akılda tutulması gereken birkaç önemli şey var:
- scanf, 20 karakter saymasa bile bir ayırıcı karakterle karşılaşırsa sonlandırılır.
- 20'den fazla karakter girilirse, str'ye yalnızca ilk 20 karakter yazılacaktır.
Değiştiricileryazın (veya kesinlik)
Bunlar, giriş için beklenen veri türünü değiştiren özel işaretlerdir. Bayrak, tür belirtecinin solunda belirtilir:
- L veya l (küçük L) d, i, o, u, x belirteçleriyle "l" kullanıldığında, bayrak programa uzun int girişinin beklendiğini söyler. e veya f belirteci ile "l" kullanıldığında, bayrak programa bir çift değer beklemesi gerektiğini söyler. "L"nin kullanılması, programa uzun bir çiftin beklendiğini söyler. "c" ve "s" belirteçleriyle "l"nin kullanılması, programa wchar_t gibi iki baytlık karakterlerin beklendiğini söyler. Örneğin, "%lc", "%ls", "%l[asd]".
- h, kısa türü belirten bir bayraktır.
- hh - değişkenin, işaretli bir karakter veya işaretsiz bir karakter değerine işaretçi olduğunu gösterir. Bayrak, d, i, o, u, x, n belirteçleriyle kullanılabilir.
- ll (iki küçük L) - değişkenin, işaretli uzun uzun int veya işaretsiz uzun uzun int türünde bir değere işaretçi olduğunu gösterir. Bayrak, belirteçlerle birlikte kullanılır: d, i, o, u, x, n.
- j - değişkenin, stdint.h başlık dosyasındaki intmax_t veya uintmax_t türüne yönelik bir işaretçi olduğunu gösterir. Belirticilerle birlikte kullanılır: d, i, o, u, x, n.
- z - değişkenin, tanımı stddef.h'de olan size_t türünün bir göstergesi olduğunu belirtir. Belirticilerle birlikte kullanılır: d, i, o, u, x, n.
- t - değişkenin ptrdiff_t türünün bir göstergesi olduğunu gösterir. Tanımbu tür stddef.h'dedir. Belirticilerle birlikte kullanılır: d, i, o, u, x, n.
Daha açık olarak, değiştiricileri olan resim bir tablo olarak gösterilebilir. Programcılar için böyle bir scanf C açıklaması daha net olacaktır.
Diğer karakterler
Formatta karşılaşılan tüm karakterler silinecektir. Aynı zamanda, kontrol dizesinde boşluk veya ayırıcı karakterlerin (yeni satır, boşluk, sekme) varlığının, işlevin farklı davranışlarına yol açabileceği unutulmamalıdır. Bir sürümde, scanf(), ayırıcı dışında bir karakterle karşılaşana kadar herhangi bir sayıda ayırıcı kaydetmeden okuyacaktır ve başka bir sürümde, boşluklar (yalnızca onlar) bir rol oynamaz ve "%d + %d" ifadesi "% d+%d" ile eşdeğerdir.
Örnekler
İşlevin nasıl çalıştığını daha iyi anlamanıza ve düşünmenize yardımcı olacak bazı örneklere bakalım.
scanf("%3s", str); //konsolda "1d2s3d1;3" dizgisini girerseniz, str scanf("%dminus%d", &x, &y); //iki sayı arasındaki eksi karakterler silinecek scanf("%5[0-9]", str); // 5 karakter olana kadar karakterler str'ye girilecektir ve karakterler 0'dan 9'a kadar sayılardır scanf("%lf", &d); //çift girdi bekliyoruz scanf("%hd", &x); //beklenen tür sayısı kısa scanf("%hu", &y); // işaretsiz sayı bekle kısa scanf("lx", &z); //beklenen türde long int
KimdenAşağıdaki örnekler, farklı semboller kullanarak beklenen sayının nasıl değiştiğini göstermektedir.
scanf C - yeni başlayanlar için açıklama
Bu bölüm yeni başlayanlar için faydalı olacaktır. Genellikle, işlevin nasıl çalıştığına ilişkin ayrıntılar olarak scanf C'nin tam bir açıklamasına sahip olmanız gerekmez.
- Bu özellik biraz eskidir. Farklı sürümlerin kitaplıklarında birkaç farklı uygulama vardır. Örneğin, açıklaması microsoft web sitesinde bulunabilen geliştirilmiş scanf SC işlevi.
- Biçimdeki belirteçlerin sayısı, işleve iletilen bağımsız değişkenlerin sayısıyla eşleşmelidir.
- Giriş akışı öğeleri yalnızca ayırıcı karakterlerle ayrılmalıdır: boşluk, sekme, yeni satır. Virgül, noktalı virgül, nokta vb. - bu karakterler scanf() işlevi için ayırıcı değildir.
- scanf bir ayırıcı karakterle karşılaşırsa giriş durdurulur. Okunacak birden fazla değişken varsa, scanf sonraki değişkeni okumaya geçer.
- Giriş veri formatındaki en ufak bir tutarsızlık, programın öngörülemeyen sonuçlarına yol açar. Peki, program bir hata ile biterse. Ancak çoğu zaman program çalışmaya devam eder ve yanlış yapar.
- scanf("%20s …", …); Giriş akışı 20 karakteri aşarsa, scanf ilk 20 karakteri okuyacak ve eğer belirtilmişse sonraki değişkeni okumaya devam edecek veya iptal edecektir. Bu durumda, bir sonraki scanf çağrısı, önceki scanf çağrısının çalışmasının durduğu noktadan giriş akışını okumaya devam edecektir. İlk 20'yi okurkenkarakter, bir sınırlayıcı karakterle karşılaşılırsa, scanf ilk değişken için 20 karakter okumamış olsa bile sonraki değişkeni iptal eder veya okumaya devam eder. Bu durumda, okunmamış tüm karakterler bir sonraki değişkene eklenecektir.
- Taranan karakter grubu bir "^" ile başlıyorsa, scanf bir sınırlayıcı karakter veya kümeden bir karakterle karşılaşana kadar verileri okuyacaktır. Örneğin, "%[^A-E1-5]", A'dan E'ye büyük harfli İngilizce karakterlerden biriyle veya 1'den 5'e kadar olan sayılardan biriyle karşılaşılıncaya kadar akıştaki verileri okuyacaktır.
- Açıklandığı gibi scanf C işlevi, değişkenlere başarılı yazma sayısına eşit bir sayı döndürür. scanf 3 değişken yazarsa, işlevin başarı sonucu 3 sayısını döndürür. scanf herhangi bir değişken yazamazsa, sonuç 0 olur. Ve son olarak, eğer scanf herhangi bir nedenle hiç başlayamazsa, sonuç EOF olacaktır.
- scanf() işlevi yanlış bir şekilde sona erdiyse. Örneğin, scanf("%d", &x) - bir sayı bekleniyordu, ancak girdi olarak karakterler alındı. Sonraki scanf() çağrısı, giriş akışında önceki işlev çağrısının bittiği noktada başlar. Bu sorunu aşmak için sorunlu karakterlerden kurtulmak gerekir. Bu, örneğin scanf("%s") çağrılarak yapılabilir. Yani fonksiyon bir dizi karakter okuyacak ve onu atacaktır. Bu zorlu yolla gerekli verileri girmeye devam edebilirsiniz.
- Scanf()'ın bazı uygulamalarında, taranan karakter kümesinde "-" kullanılmasına izin verilmez.
- "%c" belirteci, akıştaki her karakteri okur. Yani ayırıcı karakteri de okur. Sınırlayıcı karakteri atlamak ve istediğiniz karakteri okumaya devam etmek için "%1s" kullanabilirsiniz.
- "c" belirteci kullanılırken, "%10c" genişliğinin kullanılmasına izin verilir, ancak daha sonra scanf işlevine değişken olarak char türünde bir dizi öğe iletilmelidir.
- “%[a-z]”, “İngiliz alfabesinin tüm küçük harfleri” anlamına gelir ve “%[z-a]” yalnızca 3 karakter anlamına gelir: 'z', 'a', '-'. Başka bir deyişle, "-" karakteri, yalnızca doğru sırada olan iki karakter arasındaysa bir aralık anlamına gelir. "-" bir ifadenin sonunda, başında veya her iki yanında yanlış karakterlerdeyse, bu bir aralık değil, yalnızca kısa çizgi karakteridir.
Sonuç
Bu, scanf C'nin açıklamasını tamamlar. Bu, küçük programlarda ve prosedürel programlama yöntemini kullanırken çalışmak için güzel ve kullanışlı bir özelliktir. Bununla birlikte, ana dezavantaj, scanf kullanırken meydana gelebilecek öngörülemeyen hataların sayısıdır. Bu nedenle, programlama sırasında scanf C'nin açıklaması en iyi şekilde gözlerinizin önünde tutulur. Büyük profesyonel projelerde, daha üst düzey yeteneklere sahip olmaları, hataları daha iyi yakalayabilmeleri ve ele alabilmeleri ve ayrıca önemli miktarda bilgi ile çalışabilmeleri nedeniyle iostream'ler kullanılır. Ayrıca, Scanf C'nin Rusça açıklamasının birçok ağ kaynağında ve bunun örneklerinde mevcut olduğuna dikkat edilmelidir.işlevin yaşı nedeniyle kullanın. Bu nedenle, gerekirse cevabı her zaman tematik forumlarda bulabilirsiniz.
Önerilen:
Siyah etli tavuk: cinsin fotoğrafı ve açıklaması
Kümes hayvanları endüstrisindeki popüler ırklardan biri siyah etli tavuktur - uheiliuy. Ortalama bir performansı var, ancak meraklıları için çok değerli. Uheilui tavukları alışılmadık bir görünüme sahiptir, etleri eşsiz bir tada sahiptir ve yumurtalar halk hekimliğinde yaygın olarak kullanılmaktadır
Tomato Eagle Heart: çeşitliliğin özellikleri ve açıklaması, fotoğraflar ve incelemeler
Büyük domates çeşitleri her zaman talep görmektedir. Taze yemek ve çeşitli yemekler hazırlamak için yetiştirilirler. Meyveler amino asitler ve çok miktarda şeker içerir. Mükemmel bir tada sahiptirler ve çocukların beslenmesine uygundurlar. Tüm bu özellikler Eagle Heart domatesine karşılık gelir. Çeşitliliğin özellikleri ve açıklaması aşağıda sunulmuştur
Monastik salatalık: fotoğraf ve çeşitlilik açıklaması
Salatalık sadece taze değil konserve olarak da yenen en popüler sebzelerden biridir. Bitkilerin yetiştirilmesi kolaydır, özel bakım gerektirmezler, asıl mesele belirli bir bölgeye uygun doğru üretken çeşidi seçmektir. En iyilerinden biri, ülkenin herhangi bir bölgesinde istikrarlı verim sağlayan "manastır" salatalıktır. Çeşit, yüksek lezzeti, iyi tutma kalitesi ile dikkat çekiyor
Yönetimde kontrolün ana işlevi
Her lider, yönetimin temel işlevlerini yerine getirir: planlama, organizasyon, motivasyon, kontrol. Kontrol fonksiyonunun dört unsuru: sonuçları ölçmek için göstergeleri ve yöntemleri tanımlama, sonuçları ölçme, sonuçların planlandığı gibi olup olmadığını belirleme ve düzeltici eylemler
Vergilerin kontrol işlevi: açıklama ve örnekler
Vergiler nelerdir? İşlevlerinin özellikleri ve örnekleri: kontrol, sosyal (yeniden dağıtım), düzenleyici, mali. Burada hangi alt işlevler öne çıkıyor? Ek teşvik işlevi nedir? Federal Vergi Servisi'nin denetimi ve diğer işlevleri nelerdir?