3 Ekim 2016 Pazartesi

SCANF VE KULLANIMI

SCANF

    Programlarımızda sıklıkla kullanıcıdan bir bilgi almaya gereksinim duyarız. İşte bu işlemi gerçekleştirmek için scanf fonksiyonu kullanılır. Standart scanf fonksiyonu ile girdi elde edilir. Fonksiyonun prototip bildirimi stdio.h başlık dosyasında yer alır :

int scanf (char *format, ...);
    Scanf fonksiyonu, standart girdi biriminden girilen karakterleri okuyarak, parametre değişkeni olarak aktarılan nesnelere yazar. Karakterleri yorumlama işlemini de format parametresi olarak geçilen ifadeye göre gerçekleştirir. Geri dönüş değeri, başarılı olarak aktarılan karakter sayısını ifade eder. Fonksiyonun tüm parametreleri göstericidir. Format belirten ilk parametrenin dışındaki parametreler, alınan bilgilerin aktarılacağı göstericilerdir. Format belirten ifadede kullanılan dönüşüm belirteçleri ile bu göstericiler sırasıyla eşleştirilir ve her göstericiye değerin ne şekilde yorumlanarak atanacağı belirlenir. Örneğin kullanıcının klavyeden gireceği bir tamsayı değerini bir nesneye atamak istersek şöyle bir ifade yazmalıyız : 

int deger;
scanf("%d",&deger); 

//... 

int a, b; 
scanf("%d%d",&a,&b);
   
    Görüldüğü üzere, ikinci parametre olarak "deger" isimli nesnenin adresi geçilmiştir. Kullanıcının klavyeden gireceği tamsayı değeri, bu adrese yazılacaktır. İkinci örnekte ise klavyeden iki bilgi alınmıştır. Bu bilgiler de biçimlendirme ifadesine göre tamsayı olarak yorumlanır. Biçimlendirme ifadesinde özel olarak belli karakterler kullanarak tek satırda bilgi alımını da sağlayabiliriz. Örneğin klavyeden noktalı virgül ile ayrılmış üç tane tamsayı değeri almak istediğimizi düşünelim. Yani kullanıcı bir satırda gireceği tüm bilgileri yazacak ve bunları birer noktalı virgül ile ayıracak. Bu durumda scanf fonksiyonunu şu şekilde çağırmalıyız :

int a, b, c; 
scanf("%d;%d;%d",&a,&b,&c);

//... 

int gun,yil;
char ay[20];
scanf("%d %s %d";&gun,ay,&yil);

   
     Kullanıcı "34;56;21" şeklinde bir ifade girdiğinde bu değerler sırasıyla a, b ve c nesnelerine atanacaktır. Biçimlendirme ifadesinde noktalı virgül kullanmazsak, bu durumda kullanıcının bu değerleri teker teker girmesi ve her defasında "enter" tuşuna basması gerekir. Eğer boşluklarla ayrılmış bir ifadeyi tek satırda alarak nesnelerimize aktarmak istiyorsak biçimlendirme ifadesindeki dönüşüm karakterleri arasına boşluk karakteri eklemeliyiz.

    Yukarıda ikinci örnekte klavyeden aralarına boşluklar ile bırakılmış bir tarih bilgisinin okunmasını sağladık. Örneğin kullanıcı "1 Ocak 2005" gibi bir tarih bilgisini girip "enter" tuşuna bastığında bu bilgiler sırasıyla gun, ay ve yil nesnelerine aktarılacaktır. (Dizi isimleri adres belirttiği için ay dizisinin adı doğrudan yazılmıştır.) scanf fonksiyonu girdi biriminden kaç değer okuyacağını biçimlendirme ifadesinde kullanılan dönüşüm karakteri sayısına göre belirler. Bu sayı ile alınan değerleri saklamak üzere fonksiyona aktardığımız adreslerin sayısının tutması önemlidir. scanf fonksiyonu ile aldığımız bilgilerin sayısını kontrol etmek için fonksiyonun geri dönüş değerini kullanabiliriz. Bu şekilde kullanıcının bilgileri istediğimiz şekilde girmesini de sağlayabiliriz. Tarih bilgisi almak için yazdığımız yukarıdaki ifadede scanf fonksiyonunun bulunduğu satırı bir if ifadesi içerisine alıp geri dönüş değerinin 3 olup olmadığını kontrol ederiz, eğer girilen bilgi sayısı 3’e eşit değilse kullanıcıya bir bilgi mesajı vererek kullanıcıyı bilgiyi doğru girmeye zorlayabiliriz.

Hiç yorum yok:

Yorum Gönder