Jump to page: 1 2
Thread overview
August 19, 2009

Ben örnek olark verdiğiniz programları wchar kullanarak çalıştırdığımda code::blocks stdio.d modülünü açarak aşağıdaki satırı hata olarak gösteriyor.dchar olarak denediğimde de çalışma anında "access violation" hatası alıyorum.

FPUTC(c, backend);

wchar için Verdiği hata mesajları;

924|Error: undefined identifier backend|
924|Error: function std.stdio._fputc_nlock (int, _iobuf*) does not match parameter types (wchar,int)|
924|Error: cannot implicitly convert expression (backend) of type int to _iobuf*|

Yukarıdaki satırın bulunduğu kodun satırları aşağıdaki gibi.

else static if (c.sizeof == 2)
           {
               if (orientation <= 0)
               {
                   if (c <= 0x7F)
                   {
                       FPUTC(c, backend);
                   }
                   else
                   {
                       char[4] buf;
                       auto b = std.utf.toUTF8(buf, c);
                       foreach (i ; 0 .. b.length)
                           FPUTC(b[i], backend);
                   }
               }
               else
               {
                   FPUTWC(c, backend);
               }
           }

Alıntı (acehreli):

>
> import std.stdio;
> import std.cstream;
>
> void main()
> {
>     char karakter;
>     din.readf(&karakter);
>     writeln(karakter);
> }
> ```

>
Yukarıdaki kod bende hatasız olarak çalışıyor 'ğ' girince ekrana aynı şekilde 'ğ' yazdırıyor.Tiplerin bayt değerler aşağıdaki gibi.
char.sizeof ==> 1
wchar.sizeof ==> 2
dchar.sizeof ==> 4
Bu şartlar altında wchar ve dchar kullanınca doğru çalışmalı char kullanınca da problem çıkmalı. Ama tam tersi bir durum söz konusu  :-/ . Acaba dediğiniz gibi biz mi bir şeyleri yanlış anlıyoruz ki  :blush:

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

Bu programda Türkçe harf kullandım ama ASCII olmayan bütün karakterler için geçerli:

import std.stdio;

void main()
{
   // Derlenmiyor; çünkü 'ğ'nin değeri char'a sığmıyor:
   // char ğ = 'ğ';

   // Bence dmd'nin bir hatası yüzünden derlenemiyor:
   // wchar ğ = 'ğ';

   // Çalışıyor:
   dchar ğ = 'ğ';
   writeln(ğ);
}

wchar'ın derlenememesi bence hata; onun dışında tamam...

Peki girişten ASCII olmayan karakterleri nasıl okuyacağız ve yazdıracağız? Türkçe karakterlerin char'a sığmadığını anlıyorum. Örneğin aşağıdaki program ğ girildiğinde hatasız çalışıyor ama çıkışa doğal olarak ğ'nin iki baytından birisini yazdırıyor ve çıktıda ğ görünmüyor. Bu doğal, çünkü 2 bayttan oluşan Unicode ğ değeri tek bayta sığmıyor...

Ama wchar ve dchar için de okuma sırasında 'Segmentation fault' alıyorum:

import std.stdio;
import std.cstream;

void main()
{
   char karakter;
   din.readf(&karakter);
   writeln(karakter);
}

char yerine wchar veya dchar kullanınca hata oluşuyor. dmd hatası mı; yoksa bir şeyleri yanlış mı anlıyorum?

Ali

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

August 19, 2009

Aynı hata bende de çıkıyor işte... 'backend' en azından o dosyada tanımlı değil. Herhalde bir dmd (veya kütüphane) hatası olarak kabul edeceğiz. Belki birisi bir bug açmıştır bile. Bugün vakit bulursam bakacağım.

Alıntı (esatarslan52):

>

Alıntı (acehreli):

>
> > import std.stdio;
> > import std.cstream;
> >
> > void main()
> > {
> >     char karakter;
> >     din.readf(&karakter);
> >     writeln(karakter);
> > }
> > ```

> >
> Yukarıdaki kod bende hatasız olarak çalışıyor 'ğ' girince ekrana aynı şekilde 'ğ' yazdırıyor.
>

Sanırım bu, kullandığımız ortamın kodlamasıyla ilgili. Ben varsayılan kodlaması UTF-8 olan bir Linux ortamındayım. Eğer girişten char alan basit bir program yazarsam, ve Türkçe karakteri başka bir pencereden *kopyalayarak* verirsem, iki char olarak okuyor. (Programı çalıştırdığım pencerede Türkçe klavyem yok. Sonra kullanınca ona da bakacağım.)

Senin ortamında ise tek karakterli kod tablolarından birisi kullanıyor herhalde?

Öğreneceğiz! :)

Ali

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

wchar için bir bug açtım:

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

Ali

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

August 21, 2009

Comment #1 From Andrei Alexandrescu 2009-08-19 23:59:42 PDT -------

Thanks for the report.

Super :)

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

August 27, 2009

Acaba bir sonraki sürüm ne zaman çıkar ? Tahmininiz var mı ?

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

August 27, 2009

Bu hata giderilmiş... Bir sonraki sürümde doğru çalışması bekleniyor.

Ali

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

August 27, 2009

Sürümlerin geçmişi şurada:

http://www.digitalmars.com/d/2.0/changelog.html

Bazen bir kaç haftada bir, bazen iki ayda bir... En son 6 Temmuz'da çıktığına göre 2.032 çok yakında çıkacaktır.

Bundan sonra gelişmeleri daha yakından izleyelim ve yeni olanakları hemen deneyelim ve öğrenelim... :)

Ali

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

September 07, 2010

bu sorun giderilmemiş mi bende mi bir hata var.

dmd 2.048 ile ubuntu üzerinde girişten wchar ve dchar okurken Segmentation fault hatası veriyo.

import std.stdio;
import std.cstream;

void main() {
	char ch;
	//wchar ch; // hata
	//dchar ch; // hata
	din.readf(&ch);
	writeln(ch);
}

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

September 07, 2010

Evet, çalışmıyor. :(

Zaten din.readf yerine readf (stdin.readf'in kısaltması) kullanılması öneriliyor, ama o da çalışmıyor. Zaten yeni başlayanlar için fazla karışık... :/

Ben de D.ershane'deki bütün din.readf'leri readf ile değiştirmeye başlamış ama fazla ileriye gidememiştim. Ben bir sonraki sürümü bekliyorum. :/

Ali

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

« First   ‹ Prev
1 2