Forum: Ders Arası RSS
Karakter Sorunu
Sayfa:  1  2  sonraki 
Kadir Can #1
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Karakter Sorunu
Arkadaşlar,
karakterler dersini tekrar ediyordum.3 numaralı sorunun cevabını şu şekilde yazdım.
import std.stdio;
import std.cstream;
import std.uni;
void main()
{
    dchar alinan;
    dchar sonuc;
    writeln("Lütfen karakteri giriniz:");
    din.readf(&alinan);
    if(alinan=='i'){
        sonuc='İ';
    }
    else if(alinan=='I'){
        sonuc='ı';
    }
    else if(isUniLower(alinan)){
        sonuc=toUniUpper(alinan);
    }
    else if(isUniUpper(alinan)){
        sonuc=toUniLower(alinan);
    }
    writeln(sonuc);
}

Şimdi kod sorunsuz derleniyor.Çalıştırıyorum.Harf giriyorum.

object.Error:Access Violation

Hatası veriyor ve kapanıyor.Hatam nedir?
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İlk önce sana trileri projesini tanıtayım :-p

    if(alinan=='i'){
        sonuc='İ';
    }
    else if(alinan=='I'){
        sonuc='ı';
    }
    else if(isUniLower(alinan)){
        sonuc=toUniUpper(alinan);
    }
    else if(isUniUpper(alinan)){
        sonuc=toUniLower(alinan);
    }
Bunun yerine trileri projesini kullanmalısın. Trileri her şeyi düzgün olarak hallediyor.

Bende parçalanma arızası hatası verdi.
Ali Beyin yazdığı kodlarıda denedim onda da parçalanma arızası verdi. Hata sanırım dmd'de. Bir araştıracağım ancak sen şu biçimde yapabilirsin:

Karakter dizisi alırsın daha sonrada ilk karaktere erişip onu ekrana yazarsın.
Kadir Can #3
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yani sorun bende değil,dmd'de öyle mi?

trileri'nin açılımı Tr İleri=Türkçe İleri mi? :D

trileriyi biliyorum ancak kodlara nasıl dahil edebilirim?
canalpay (Moderatör) #4
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yani sorun bende değil,dmd'de öyle mi?

Hatta sanırım nur topu gibi bir bug'ımız oldu :-) Ali Bey geldiğinde bunu sorarız. Ben şimdi d.learn forumunada sorarım.

trileri'nin açılımı Tr İleri=Türkçe İleri mi? :D

Hayır "Türk İleri" Ali Bey kimseye söylemeyin diyor ona göre :-p

trileriyi biliyorum ancak kodlara nasıl dahil edebilirim?

Gereken modülü import projeye ekleyeceksin.

import std.stdio gibi import trileri.uni diyeceksin.

Derlerken dmd program.d diyordun ya:

şimdi:

dmd program.d trileri/uni.dnintamadresi

şeklinde derleyeceksin.
Kadir Can #5
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Anladım.

Türk İleri de olur.Aynı şey sonuçta. :D

Kimseye söylemeyeceğim :D
acehreli (Moderatör) #6
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ı
Bu galiba yakın zaman önce düzeltilen hata. Bir sonraki sürümde düzgün olmasını bekliyorum.

trileri'nin ismi de "Türkçenin i harfleri"nden geliyordu.

Ali
Kadir Can #7
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ali bey,
Biz daha komplike adlar düşünüyorduk :D

Hatanın düzeltilmesi iyi olmuş.Peki neden böyle bir hata oluyordu?Bilginiz var mı?
acehreli (Moderatör) #8
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ı
Programı gdb altında başlatınca ve çöktüğü zaman gdb'nin bt komutunu verince şunu görüyorum:

Program received signal SIGSEGV, Segmentation fault.
0x08057055 in std.stream.Stream.vreadf() ()
(gdb) bt
#0  0x08057055 in std.stream.Stream.vreadf() ()
#1  0x08057d1c in std.stream.Stream.readf() ()
#2  0x00000002 in ?? ()
#3  0x08080190 in __dso_handle ()
#4  0xffffd250 in ?? ()
#5  0xf7d2ae40 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)


Yani çöktüğü yerde vreadf() işlevi var. dmd/phobos/std/stream.d dosyasına bakıyorum (bende tam yolu şöyle: /usr/include/d/dmd/phobos/std/stream.d). vreadf() işlevinin içinde tek karakter olarak yalnızca char'ların okunabildiğini görüyorum:

        } else if (arguments[j] is typeid(char*)) {
          fmt = "%c";
        }

Orada desteklenen başka bir sürü tür daha var ama wchar ve dchar yok. Ben bu noktada std.cstream'in artık gitmesini ve bu sorunların bitmesini bekliyorum. :)

Ali
Kadir Can #9
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Eğer char yaparsam düzgün çalışır mı(Tabi ki Türkçe karakterlere elveda diyerek) peki?

NOT:Çalışıyor.
canalpay (Moderatör) #10
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Eğer char yaparsam düzgün çalışır mı(Tabi ki Türkçe karakterlere elveda diyerek) peki?

Dizi olarak tut ondan sonra ilk karakteri bastır ekrana.

import std.stdio;
import std.cstream;
import std.uni;
void main()
{
    dchar[] alinan;
    dchar sonuc;
    writeln("Lütfen karakteri giriniz:");
    din.readf(&alinan);
    if(alinan[0]=='i'){
        sonuc='İ';
    }
    else if(alinan[0]=='I'){
        sonuc='ı';
    }
    else if(isUniLower(alinan[0])){
        sonuc=toUniUpper(alinan[0]);
    }
    else if(isUniUpper(alinan[0])){
        sonuc=toUniLower(alinan[0]);
    }
    writeln(sonuc);
}
Kadir Can #11
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
canalpay;
Bu sefer de UTF-8 karakterleri dönüştüremiyor.Sanırım en iyisi Türkçe adında dizi hazırlayıp eşleşmeye bakmak.Bunu deneyeceğim.
Kadir Can #12
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bu da çalışmıyor.Acaba kodumda hata var mı?
import std.stdio;
import std.cstream;
import std.uni;
void main()
{
    dchar[] alinan;
    dchar sonuc;
    dchar[] türkçe_k=['ç','ı','ü','ğ','ö','ş'];
    dchar[] türkçe_b=['Ç','İ','Ü','Ğ','Ö','Ş'];
    int i;
    writeln("Lütfen karakteri giriniz:");
    din.readf(&alinan);
    while(i<türkçe_k.length){
        if(alinan[0]==türkçe_k[i]){
            writeln(türkçe_b[i]);
            break;
        }
        i++;
    }
    i=0;
    while(i<türkçe_b.length){
        if(alinan[0]==türkçe_b[i]){
            writeln(türkçe_k[i]);
            break;
        }
        i++;
    }
}
canalpay (Moderatör) #13
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu sefer de UTF-8 karakterleri dönüştüremiyor.Sanırım en iyisi Türkçe adında dizi hazırlayıp eşleşmeye bakmak.Bunu deneyeceğim.

Emin misin? Ben şimdi denedim ve doğru çalıştı. Bir daha dene istersen:

import std.stdio;
import std.cstream;
import std.uni;
void main()
{
    dchar[] alinan;
    dchar sonuc;
    writeln("Lütfen karakteri giriniz:");
    din.readf(&alinan);
    if(alinan[0]=='i'){
        sonuc='İ';
    }
    else if(alinan[0]=='I'){
        sonuc='ı';
    }
    else if(isUniLower(alinan[0])){
        sonuc=toUniUpper(alinan[0]);
    }
    else if(isUniUpper(alinan[0])){
        sonuc=toUniLower(alinan[0]);
    }
    writeln(sonuc);
}
Hata varsa hatanın ne olduğunu açıksa anlatır mısın?
Kadir Can #14
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
dchar  decode(in char[],ref size_t):
 
INVALID UTF-8 SEQUENCE [141] around index 0

Hata bu.

En azından kodlarımın hatalı olmamasına sevindim. :D

Sanırım Windows'un tipik Türkçe alerjisi.Ama yanına kardeş gelecek,kodlarımı Linux'ta yazacağım.
canalpay (Moderatör) #15
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sanırım Windows'un tipik Türkçe alerjisi.
Pek emin olamadım.
Şunu denesene:

import std.stdio;
import std.cstream;
import std.uni;
 
version(Windows)
{
    import std.c.windows.windows : SetConsoleCP, SetConsoleOutputCP;
    static this()
    {
        SetConsoleCP(65001);
        SetConsoleOutputCP(65001);
    }
}
 
void main()
{
    dchar[] alinan;
    dchar sonuc;
    writeln("Lütfen karakteri giriniz:");
    din.readf(&alinan);
    if(alinan[0]=='i'){
        sonuc='İ';
    }
    else if(alinan[0]=='I'){
        sonuc='ı';
    }
    else if(isUniLower(alinan[0])){
        sonuc=toUniUpper(alinan[0]);
    }
    else if(isUniUpper(alinan[0])){
        sonuc=toUniLower(alinan[0]);
    }
    writeln(sonuc);
}

Birde nedeni hakkında bir teori geliştirdim. Şu programcığı "öçşğüiİ" dizisi ile deneyip sonucunu kopyalar mısın buraya?

import std.stdio;
import std.cstream;
 
 
version(Windows)
{
    import std.c.windows.windows : SetConsoleCP, SetConsoleOutputCP;
    static this()
    {
        SetConsoleCP(65001);
        SetConsoleOutputCP(65001);
    }
}
 
void main()
{
 
    dchar[] sonuc;
    din.readf(&sonuc);
    writeln(sonuc);
}
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:
Sayfa:  1  2  sonraki 
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-22, 05:00:35 (UTC -08:00)