Merhaba,
Benim küçük, kendi haline ve aşağıdaki adresdeki depoda bulunan deneysel bir rehber projem var. Bir süredir yoğunluktan yeni özellikler ekleyememiştim. Geçende aklıma takılan bir özelliği eklemeye karar verdim. Malum rehberin şu halinde kişi için açılan kayıtta sadece bir telefon numarası kaydı yapılabilmekte, oysaki kişilerin birden fazla telefonu olabilir. Bu vesile ile bende bir kişi kaydı için en fazla üç adet telefon numarası kaydı yapılmasını sağlayacak bir model geliştirmeye çalıştım. Ortaya çıkan örnek çalışma şöyle oldu.
import std.stdio;
import std.string;
struct Kayit
{
string isim;
string[] telefonNo;
}
void main()
{
Kayit kay;
write("Isim :");
kay.isim = readln();
kay.telefonNo = TelefonNumaralariAl(3);
writeln("Isim ->", kay.isim);
writeln("TelefonNo[0] ->", kay.telefonNo[0]);
writeln("TelefonNo[1] ->", kay.telefonNo[1]);
writeln("TelefonNo[2] ->", kay.telefonNo[2]);
}
string[] TelefonNumaralariAl(int adet)
{
string[] telefonlar;
telefonlar.length = adet;
string okunanTelefonNo;
for (int i = 0; i < adet; ++i)
{
write("Bir telefon[", i+1 ,"] :");
okunanTelefonNo = readln();
if (okunanTelefonNo != "\n")
{
telefonlar[i] = chomp(okunanTelefonNo);
}
else
{
break;
}
}
return telefonlar;
}
Burada Kayit isimli yapı içinde string[3] telefonNo isminde üç değer alabiilien tek boyutlu bir dizi tanımladım ve daha sonra string[] TelefonNumaralariAl() metodu içinde kullanıcıdan telefon numaralarını toplayıp bir dizi içine doldurup geri gönderdim ve bu diziyide Kayit yapısı içindeki gerçek yerine aktardım. Buraya kadar bir sıkıntım yok ama oldukça fazla uğraştım :)
Bu uğraşılarım arasında şöyle bir sorunla karşılaştım. kayıt içindeki diziyi dinamik dizi olarak tanımladığım zaman şöyle bir hata verdi.
import std.stdio;
import std.string;
struct Kayit
{
string isim;
string[] telefonNo;
}
void main()
{
Kayit kay;
write("Isim :");
kay.isim = readln();
string okunanTelefonNo;
int say = 0;
do
{
write("Bir telefon[", say + 1 ,"] :");
okunanTelefonNo = readln();
kay.telefonNo[say] = chomp(okunanTelefonNo);
++say;
} while (okunanTelefonNo != "\n")
writeln("Isim ->", kay.isim);
writeln("TelefonNo[0] ->", kay.telefonNo[0]);
writeln("TelefonNo[1] ->", kay.telefonNo[1]);
writeln("TelefonNo[2] ->", kay.telefonNo[2]);
}
Bu kodu çalıştırdığım zaman aldığım hata ise şöyle oldu;
Alıntı:
>Isim :zafer
Bir telefon[1] :5449638574
core.exception.RangeError@main(25): Range violation
./main(onRangeError+0x28) [0x8091c48]
./main(_d_array_bounds+0x16) [0x808d816]
./main() [0x808b10a]
./main(_Dmain+0x92) [0x808a786]
./main(_D2rt6dmain24mainUiPPaZi7runMainMFZv+0x14) [0x808dc60]
./main(_D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv+0x1d) [0x808d905]
./main(_D2rt6dmain24mainUiPPaZi6runAllMFZv+0x32) [0x808dca2]
./main(_D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv+0x1d) [0x808d905]
./main(main+0x94) [0x808d8b4]
/lib/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xf75fdc76]
./main() [0x808a641]
Dinamik dizinin boyutunu bir yerlerde ayarlamam gerekiyor sanırım "core.exception.RangeError@main(25): Range violation" aldığımız hata onu gösteriyor ama konuyu tam anlayamadığım için buraya taşıdım hep beraber bakabilir miyiz?
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]