D Programlama Dili – Programlama dersleri ve D referansı
Ali Çehreli

çökme: [crash], programın hata ile sonlanması
düzen: [format], bilginin giriş ve çıkışta nasıl düzenlendiği
işlev: [function], programdaki bir kaç adımı bir araya getiren program parçası
parametre: [parameter], işleve işini yapması için verilen bilgi
Phobos: [Phobos], D dilinin standart kütüphanesi
... bütün sözlük



İngilizce Kaynaklar


Diğer




Giriş Düzeni

Çıktı Düzeni bölümünde anlatılanlara benzer şekilde, girişten gelen verilerin düzeni de belirtilebilir. Bu düzen; hem okunması istenen bilgiyi, hem de gözardı edilmesi istenen bilgiyi belirtebilir.

Giriş için kullanılan düzen dizgisi C'deki scanf işlevinin düzen dizgisine benzer.

Düzen dizgisi olarak şimdiye kadar yaptığımız gibi " %s" kullanıldığında, okunmakta olan değişkenin türüne en uygun olan düzende okunur. Örneğin aşağıdaki readf çağrısında değişkenin türü double olduğu için girişteki karakterler kesirli sayı olarak okunurlar:

    double sayı;

    readf(" %s", &sayı);

Düzen dizgisi içinde üç tür bilgi bulunabilir:

O bilgiler sayesinde, girişten gelen veri içerisinden bizim için önemli olanlarını seçip çıkartmak ve geri kalanını gözardı etmek son derece kolaydır.

Ayrıntıya girmeden önce, bu üç tür bilgiyi kullanan bir örneğe bakalım. Girişte tek satır halinde şöyle bir bilgi bulunsun:

numara:123 not:90

O satır içerisinden bizim için önemli olan iki bilgi, öğrencinin numarası ve notu olsun; yani girişteki numara: ve not: gibi karakterlerin bizim için bir önemi bulunmasın. İşte o satır içinden öğrencinin numarasını ve notunu seçen ve geri kalanını gözardı eden bir düzen dizgisi şöyle yazılabilir:

    int numara;
    int not;
    readf("numara:%s not:%s", &numara, &not);

"numara:%s not:%s" düzen dizgisinde işaretli olarak gösterilen bütün karakterler girişte aynen bulunmalıdırlar; onlar readf tarafından girişten okunup gözardı edilirler.

O düzen dizgisinde kullanılan tek boşluk karakteri, girişte o noktada bulunan bütün boşluk karakterlerinin gözardı edilmelerine neden olur.

% karakterinin özel anlamı nedeniyle, girişte % karakterinin kendisinin gözardı edilmesi istendiğinde %% şeklinde çift olarak yazılır.

Tek satırlık bilgi okumak için Dizgiler bölümünde strip(readln()) yöntemi önerilmişti. Düzen dizgisinin sonuna yazılan \n karakteri sayesinde readf de bu amaçla kullanılabilir:

import std.stdio;

void main() {
    write("Adınız   : ");
    string ad;
    readf(" %s\n", &ad);       // ← sonda \n

    write("Soyadınız: ");
    string soyad;
    readf(" %s\n", &soyad);    // ← sonda \n

    write("Yaşınız  : ");
    int yaş;
    readf(" %s", &yaş);

    writefln("%s %s (%s)", ad, soyad, yaş);
}

Yukarıda ad ve soyad okunurken kullanılan düzen dizgileri satır sonunda basılan Enter tuşunun oluşturduğu \n karakterinin de okunmasını ve gözardı edilmesini sağlarlar. Buna rağmen, satır sonlarındaki olası boşluk karakterlerinden kurtulmak için yine de strip()'i çağırmak gerekebilir.

Düzen karakterleri

Verinin nasıl okunacağı aşağıdaki düzen karakterleriyle belirtilir:

d: Onlu sistemde tamsayı oku

o: Sekizli sistemde tamsayı oku

x: On altılı sistemde tamsayı oku

f: Kesirli sayı oku

s: Değişkenin türüne uygun olan düzende oku; en yaygın kullanılan belirteç budur

c: Tek karakter oku; bu belirteç boşlukları da okur (gözardı edilmelerini önler)

Örneğin, girişte 3 tane "23" bulunduğunu varsayarsak, her birisi aşağıdaki farklı düzen karakterlerine göre farklı olarak okunur:

    int sayı_d;
    int sayı_o;
    int sayı_x;

    readf(" %d %o %x", &sayı_d, &sayı_o, &sayı_x);

    writeln("onlu olarak okununca     : ", sayı_d);
    writeln("sekizli olarak okununca  : ", sayı_o);
    writeln("on altılı olarak okununca: ", sayı_x);

3 defa "23" girildiği halde her birisi farklı okunur:

onlu olarak okununca     : 23
sekizli olarak okununca  : 19
on altılı olarak okununca: 35

Not: "23", sekizli düzende 2x8+3=19 değerinde, ve on altılı düzende 2x16+3=35 değerindedir.

Problem

Girişten yıl.ay.gün düzeninde bir tarih bilgisi gelsin. Ekrana kaçıncı ay olduğunu yazdırın. Örneğin 2009.09.30 geldiğinde 9 yazılsın.