Thread overview
bool değeri \"false\" veya \"true\" olarak okumak
Jul 30, 2009
esatarslan52
Jul 31, 2009
esatarslan52
July 30, 2009

Girişi 1 veya 0 olarak denedim yine hata verdi. Digitalmars'ın sitesinde readf kullanımını aşağıdaki gibi örneklemiş.

int x;
double y;
string s;
file.readf(&x, " hello ", &y, &s);
file.readf("%d hello %f %s", &x, &y, &s);
file.readf("%d hello %f", &x, &y, "%s", &s);

file.readf("%d hello %f %s", &x, &y, &s);
file.readf("%d hello %f", &x, &y, "%s", &s);
Kısımlarında C de scanf() kullanımında olduğu gibi %d,%s ve %f kullanılmış. Bool veri tipini okutmak içinde atıyorum "%b" gibi özel bir tanımlamaya ihtiyaç duyulabilirmi?Ben aradım ama bulamadım :(. (Bu arada %b yi denedim program yine çöktü :D)

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

July 30, 2009

bool değeri çıkışa gönderince "false" veya "true" yazdırılıyor ama girişten okurken o dizgiler kabul edilmiyorlar. Doğal olarak şunun çalışmasını beklerdim:

   bool b;
   din.readf(&b);

"false" veya "true" girince maalesef program göçüyor. Hiç anlamadım neden böyle yaptıklarını. (?)

Sonuçta basit bir dönüşüm programı yazdım ama bu işin de 'readf' tarafından halledilmesini beklerdim. Belki daha kolay yolu da vardır...

Çünkü C++'da hem giriş hem de çıkış için "false" ve "true" kullanılabilir. 'boolalpha' kullanmak yeter:


#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
   cin >> boolalpha;
   cout << boolalpha;

   bool b = false;
   cin >> b;
   cout << b << endl;
}

Ali

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

July 30, 2009

Çünkü %b binary anlamına geliyormuş. Aynılarını ben de denemiştim ve DigitalMars'ta sormuştum. Bakalım hiç yanıt gelmiş mi... Hayır, henüz bir yanıt yok. Onların yanıtlarını merak edenler için soru şurada:

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=17291

Bu konunun önemi, şu anda derslerin "Mantıksal İfadeler" sayfasını yazıyorum ve öğrencinin girişten "false" ve "true" girebilmesini istedim. Çünkü daha 0 ve 1 değer dönüşümlerini anlatmadım. Ayrıca öğrenciye "int olarak tanımla" demek de istemedim ve zaten çok saçma. Bence bunu readf'in yapması gerek.

Başka bir takıntı: güya henüz görmedikleri bir şeylere girmeyecektim. Yine de bu kuralı bozdum ve denemek için kullanacakları programa şöyle bir fonksiyon yerleştirmek zorunda kaldım:

bool girişten_bool_oku(string mesaj)
{
   // Mesajı yazdır
   dout.writef(mesaj);

   // Girilen kelimeyi bir dizgiye oku
   char[] giriş;
   din.readf(&giriş);

   /*
     Şimdi girilen dizgi "true" ise true değerini, "false"
     ise false değerini döndürmek istiyoruz. Yani burada bir
     dönüşüm yapıyoruz: örneğin "true" dizgisini görünce true
     değerini döndürüyoruz.

     Not: "true" dizgisi ile true değerinin aynı şey
          olmadıklarına dikkat edin: Birisi 't', 'r' gibi
          karakterlerden oluşur, diğeri ise bir bool
          değeridir.
   */

   // Sonuç olarak döndüreceğimiz değişken bu
   bool dönüştürülen_değer;

   // "false"->false ve "true"->true dönüşümü
   if (giriş == "false") {
       dönüştürülen_değer = false;

   } else if (giriş == "true") {
       dönüştürülen_değer = true;

   } else {
       /*
         Bilmediğimiz bir kelime geldi. Bu durumda ne
         yapacağımız belli olmadığı için işlemden vazgeçip
         hata atmaktan başka hiçbir çaremiz yok.
       */
       throw new Exception(
           cast(string)("Bu kelimeyi anlamadım: " ~ giriş));
   }

   return dönüştürülen_değer;
}

'main' içinde şöyle kullanılıyor:

bool yağmur_var = girişten_bool_oku("Yağmur yağıyor mu? ");

Ali

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

July 31, 2009

Digitalmars'dan hala bi cevap yok :(
Bu arada dersi inceledim tekrardan ellerinize sağlık :). Yalnız Girişten bool Okumak kısmında örnek henüz yok. Digitalmars'dan cevap geldikten sonra mı koymayı düşünüyosunuz.

Ve bir öneri;
Acaba sözlükte olan kelimelerin, konu anlatımında geçtiği yerde kelimenin sözlükte açıklaması olduğunu belirtmek için altı çizgili (Renkli,kalın vs..) şekilde yazılsa nasıl olur :rolleyes: .

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

July 31, 2009

Öneriler için teşekkürler.

Girişten bool okuma konusu beni biraz rahatsız ediyor çünkü o noktada daha girişten dizgi bile okumamışız. :) Eğer problemlerde kullandığım fonksiyona gerek kalmazsa, o bölümü o noktadan kaldırırım bile.

Ben onu yalnızca problemlerde kullanıldığı için söylemek zorunda kaldığımı hissettim. Yani o henüz anlatılan bir şey değil.

Sözcüklerin altını çizmek de ilginç bir fikir. Hatta fare üstüne gelince kısa anlamı hemen görünebilir ama başka sitelerde karşılaştığımda ben ona sinir oluyorum. :D

Sözcüklerin altını çizme konusunda teknik bir güçlük olabilir: benim elle her geçtiği yeri işaretlemem gerekir (otomatikleştirilebilir de belki). Olmayacak şey değil tabii, ama şimdiki yöntem, bütün sayfaya tek bir işaret koymak kadar kolay.

Ali

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

August 01, 2009

Bu konuyu D'nin hata veri tabanına girdim:

http://d.puremagic.com/issues/show_bug.cgi?id=3223

Ayrıca Phobos kodlarına şöyle bir baktım, hiçbir yerde "false" ve "true"dan bool dönüşümü görünmüyor.

dmd/src/phobos/std/stream.d dosyasında 'vreadf' diye bir fonksiyon var. Maalesef onun içinde bool görünmüyor. Neyse... Zaten o kadar önemli bir konu değil. int olarak 0 ve 1 girilebiliyor zaten.

Ali

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