Thread overview
din ve dout yerine stdin ve stdout
July 04, 2010

Bende readln kullanıyorum bazen. Çünkü readln'nın parantez içinde istediğimiz karakteri verip o karakter gelene kadar okuması olsun gösterge ile alakası olmadan değişkene değeri aktarabiliyor olmamız her halükarda çok daha iyi.

Alıntı:

>

Fazla karmaşık değil, değil mi?

Bence karışık değil. Ancak readln'nın parametresinde belirtilen boşluğun eklenmesi bence doğru değil.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 04, 2010

Alıntı:

>

'\n' karakterinden mi bahsediyorsun? Onu yazmak zorunda değiliz ama istersek satırın başka bir karakterde sonlanmasını isteyebiliriz. Örneğin gelen ilk 'a'ya kadar okutabiliriz. Esnek yapmışlar ama kullanmaya gerek yok.

Biliyorum. readln koduna ben siz d'nin ingilizce forumuna din.readf'den başka ne kullanabiliriz dediğinizde bakmıştım. Ben o karakterin okunan dizgide de olmasını doğru bulmuyorum dedim.

örneğin

string a=readln();
if(a[$-1]=='\n'){

   writeln("\n karakterinin eklenmesini doğru bulmuyorum.")
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 03, 2010

std.cstream (ve başka akımlar) Phobos'tan emekliye ayrılacaklarına göre standart giriş/çıkış akımı olarak std.stdio'nun stdin ve stdout'unu kullanmak gerek; değil mi? Bu akımlar C'de de aynı isimdeler.

Aslında serbest olarak yazdığımız writeln ve readln zaten stdout ve stdin'i kullanıyorlar. Örneğin readln'in tanımı şöyle:

string readln(dchar terminator = '\n')
{
   return stdin.readln(terminator);
}

D.ershane'de girişten bilgi almak için henüz aşağıdakindan daha temiz bir şey bulamadım:

import std.stdio;
import std.string;
import std.conv;

void main()
{
   write("İsminiz: ");
   auto isim = to!string(strip(readln()));

   write("Yaşınız: ");
   auto yaş = to!int(strip(readln()));

   writefln("Sevgili %s, ben de haftaya %s yaşımı dolduracağım", isim, yaş);
}

Fazla karmaşık değil, değil mi? readln() satır okuyor; strip, baştaki ve sondaki boşlukları kırpıyor; to da dizgiden belirtilen türe dönüştürüyor. Yani to, format'ın tersi: format string'e dönüştürür; to, string'den dönüştürür. (Aslında to başka türlerden başka türlere de dönüştürür; bir tarafın string olması şart değildir.)

Aslında bir de parse var. parse, dönüşümleri uyguladıkça taramakta olduğu string'i de tüketir:

import std.stdio;
import std.string;
import std.conv;

void main()
{
   writeln("Toplanacak sayıların hepsini tek satır olarak girin: ");
   auto satır = strip(readln());

   double toplam = 0;
   int adet = 0;

   while (satır.length) {
       toplam += parse!double(satır);
       ++adet;
       munch(satır, whitespace);
   }

   writefln("%s sayının toplamı %s, ortalamaları %s",
            adet, toplam, toplam / adet);
}

Yukarıdaki programdaki 'satır', parse tarafından parça parça tüketiliyor. parse'ın belgesinde bir özelliğe dikkat çekmişler: C'nin scanf ailesinden işlevleri, tararken boşlukları atlarlar. parse atlamıyor! Onun için munch'ı kullanarak her adımda dizginin başındaki boşluk karakterlerinden kurtuluyoruz.

Boşluk karakterlerini teker teker kendimiz yazmak yerine de std.string'de tanımlı olan whitespace'i kullanıyoruz. whitespace şöyle tanımlanmış:

immutable char[6] whitespace = " \t\v\r\n\f";           /// ASCII whitespace

Sırasıyla şu karakterler: boşluk, tab, düşey tab, satır başı, yeni satır, yeni sayfa (form feed).

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 04, 2010

Alıntı (canalpay):

>

readln'nın parametresinde belirtilen boşluğun eklenmesi bence doğru değil

'\n' karakterinden mi bahsediyorsun? Onu yazmak zorunda değiliz ama istersek satırın başka bir karakterde sonlanmasını isteyebiliriz. Örneğin gelen ilk 'a'ya kadar okutabiliriz. Esnek yapmışlar ama kullanmaya gerek yok.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 04, 2010

Şimdi anladım. Sana katılıyorum. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]