June 22, 2011

İlginçmiş gerçekten de. double okurken basılan yeni satır karakterini stringe nasıl atıyor hayret.

Ben zaten şu mesajdan beri (http://ddili.org/forum/thread/496) olabildiğince 'readln' kullanıyorum.

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

June 22, 2011

Girişten veri okumayı artık anladığımı düşünüyordum ama şu program beni şaşırttı:

import std.stdio;
import std.string;

void main()
{
   double d;
   readf(" %s", &d);
   writeln("okudum: ", d);

   // (burası)

   string s = chomp(readln());
   writeln("okudum: ", s);
}

double okunurken basılan '\n' karakteri string'in boş okunmasına neden oluyor. Yukarıda "burası" diye işaretlediğim yere şunu ekleyince sorun çözülüyor:

   readf(" ");

Aslında d'nin okunduğu zamanki düzen dizgisini " %s " (iki boşlukla) yazınca da istediğim gibi olmasını beklerdim ama tam istendiği gibi olmuyor. Çünkü o zaman d'nin arkasından yazılan "okudum:" mesajı da bir sonraki s için Enter'a basıldıktan sonra çıkıyor.

Neden olduğunu anlayabiliyorum ama önemli değil. readf(" ")'i kullanışlı bir yöntem olarak öğrenmiş oldum.

Ali

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