Forum: Ders Arası RSS
Exception calismiyo...
Afsin #1
Kullanıcı başlığı: Afşin Toparlak
Üye Ock 2011 tarihinden beri · 2 mesaj · Konum: Hamburg
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Exception calismiyo...
Merhaba,

söyle bir program yazdim, fakat olmuyo:

[ 15:28:49 ] vs244123:~% nl -ba exception.d
     1  #!/opt/usr/local/bin/gdmd -run
     2
     3  import std.cstream;
     4  import std.stdio;
     5
     6  void main()
     7  {
     8    bool binput;
     9
    10    binput = read_bool("true or false please: ");
    11
    12    writeln("was: ", binput);
    13  }
    14
    15  bool read_bool(string message)
    16  {
    17    dout.writef(message);
    18
    19    char[] input;
    20    din.readf(&input);
    21
    22    bool binput;
    23
    24    if (input == "false") {
    25      binput = false;
    26    } else if (input == "true") {
    27      binput = true;
    28    } else {
    29      throw new
    30        Exception(
    31                  ("unknown: " ~ input ~ " true or false please").idup);
    32    }
    33
    34    return binput;
    35  }
[ 15:28:53 ] vs244123:~% ./exception.d
true or false please: true
was: true
[ 15:29:11 ] vs244123:~% ./exception.d
true or false please: ggg
[ 15:29:23 ] vs244123:~%

Sistemim:

[ 15:29:23 ] vs244123:~% uname -a
Linux vs244123.vserver.de 2.6.9-023stab052.4-smp #1 SMP Tue May 11 19:21:39 MSD 2010 x86_64 GNU/Linux

[ 15:33:05 ] vs244123:~% gdc -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --enable-languages=d --disable-shared --disable-bootstrap
Thread model: posix
gcc version 4.4.5 20101001 (gdc hg, using dmd 2.051) (GCC)
[ 15:33:13 ] vs244123:~%

Tesekkürler, selamlar,
Afsin
Mengu (Moderatör) #2
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
selamlar afsin,

bu gdc ile ilgili bir problem olabilir mi? ben dmd ile derledim ve sorunsuz calisti.

mengu@mengu-dell:~/projects/d$ ./exp 
true or false please: true
was: true
mengu@mengu-dell:~/projects/d$ ./exp 
true or false please: false
was: false
mengu@mengu-dell:~/projects/d$ ./exp 
true or false please: scala
object.Exception: unknown: scala true or false please
----------------
./exp(bool exp.read_bool(immutable(char)[])) [0x8086043]
./exp(_Dmain+0x14) [0x8085f18]
./exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bf46]
./exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bea0]
./exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bf8a]
./exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bea0]
./exp(main+0x96) [0x808be46]
/lib/libc.so.6(__libc_start_main+0xe7) [0x846ce7]
./exp() [0x8085e51]
http://www.mengu.net - some kind of monster
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #1
Güzel renkli görünsün diye bir de satır numarasız olarak:

#!/opt/usr/local/bin/gdmd -run
 
import std.cstream;
import std.stdio;
 
void main()
{
  bool binput;
 
  binput = read_bool("true or false please: ");
 
  writeln("was: ", binput);
}
 
bool read_bool(string message)
{
  dout.writef(message);
 
  char[] input;
  din.readf(&input);
 
  bool binput;
 
  if (input == "false") {
    binput = false;
  } else if (input == "true") {
    binput = true;
  } else {
    throw new
      Exception(
                ("unknown: " ~ input ~ " true or false please").idup);
  }
 
  return binput;
}

Yani "true" ve "false"tan başka bir şey girildiğinde programın yakalanmayan bir hata ile sonlanmasını bekliyoruz, ama hata mesajı vermeden sonlanıyor.

Benim hiç deneyimim olmayan yeni gdc'yi kullanıyorsun. Tek tahminim, gdc atılan hatayı bir şekilde yutuyor. Eğer öyleyse gdc'nin hatasıdır; çünkü doğru olarak çalışması için atılan hatanın da göserilmesi gerekiyor.

Ben dmd ve rdmd 2.051 ile denedim; bende hatalı olarak sonlandı.

gdmd'nin de rdmd'nin gdc ile gelen olduğunu tahmin ediyorum. Yapılabilecekler:

- main'deki kodu bütünüyle bir try-catch bloğu içine almayı dener misin; bakalım hiç olmazsa kendimiz yakalayabiliyor muyuz:

void main()
{
    try {
        bool binput;
 
        binput = read_bool("true or false please: ");
 
        writeln("was: ", binput);
 
    } catch (Exception hata) {
        writeln("HATA: ", hata);
    }   
}

- gdc'nin D2 desteği çok yeni; hataları bulunabilir; onun yerine dmd ve rdmd'yi deneyebilir misin. (Ama daha 64 bit desteği yok; çıktı çıkacak; bekliyoruz. :))

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 04:06:51 (UTC -08:00)