March 11, 2011

dmd 2.052'de girişten okumayı değiştirdiler. Şu program birincinin sonunda basılan Enter'a karşılık gelen satır sonu kodları nedeniyle takılıp kalıyor:

import std.stdio;

void main()
{
   int birinci;
   write("birinci: ");
   readf("%s", &birinci);

   int ikinci;
   write("ikinci : ");
   readf("%s", &ikinci);
}

Bir çözüm, genel bir ilke olarak düzen belirteçlerinden önce "buradaki bütün boşlukları oku ve gözardı et" anlamına gelen tek boşluk kullanmak:

   readf(" %s", &birinci);
// ...
   readf(" %s", &ikinci);

Tek düzen dizgisi kullanıldığında da aynı:

   readf(" %s %s", &birinci, &ikinci);

Bence tutarlı ama C'den sapmış oluyor. C'de arada boşluk bulunmasa da çalışır:

   scanf("%s%s", &birinci, &ikinci);

D'de boşluk kullanılmazsa takılıyor.

Ali

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