PDA

Tam Sürümünü Görmek İçin : c ve c++ karisik dosya yazdirma sorunu


cycloner
17/01/2007, 16:50
kardeslerim bu gece saat 12 ye kadar bu gun : 17.1.2007... size linkini werdigim dosyadaki yazma sorunumu cozmem gerekio..... bakın sorunum su;

programda eksiklikler war tamam ama bir banka otomasyonu durumunun ilk hali ben bunun ustune daha bisiler yazdim ama bu halindede yeni halindede ayni sorun war... bu halde iken alin ... derleyip calistirin... bakin sorunum musteri.dat ta soyleki program ilk yazdigi kisiyi baya bir hizli yazarken ikincisinde cok yawasliyo we cok gec yazma islemini tamamliyo... funct.cpp icinde musteri ekle fonksiyonu... icindeki fread we fwritelerimde bir sorun war ben bi turlu sorunu cozemedim... ama bir ilgilenirseniz cok sevinirim.... programi acin... ilk menuden 1 girin... kullanici nosu tanimli deil bi rakam sallayin sifre "asdasd".... lutfen beyler bayanlar cok fazla yardiminiza ihtiyacim war... bu geceye kadar bitmis olmali bi tek dosya sistemim kalmis olucak.... insallah sorunumu anlatabilmisimdir..... dosya burda::

http://www.somurge.net/cproblem/sorun.rar


simdiden tesekkurler...


acehreli
17/01/2007, 19:37
cycloner (veya baskasi), dosyayi okunabilir bir formatta gosterebilir misin lutfen. Benim tarayicim rar dosyalarini acmayi bilmedigini soyledi.

Ali

cycloner
17/01/2007, 21:08
tamamdir kardes ben buraya atmaya calisiom txt formatinda uzantilarini cpp yaparsan acabilirsin proje.cpp yi derliceksin..

acehreli
17/01/2007, 21:39
Yalnizca o isleve baktim:

srand'in kullanimini yanlis anlamissin. Onun yalnizca bir kere, genellikle program basinda cagrilmasi gerekir; yani main icinde...

Yoksa o do dongusunun isletildigi bir cok defa, rastgele sayi dizisini hep ayni yerden baslatmis olacaksin.

Gerisini anlamaya calisiyorum... Bos bir yer mi bulmaya calisiyorsun? Rastgele bir musteri numarasi seciyorsun, dosyayi bastan sona tarayarak o numarayi bulmaya calisiyorsun. Peki dosyada gercekten var mi oyle bir musteri numarasi? Yoksa, butun taramayi bosa harcamis olarak yeni bir sayi tutuyorsun.

srand'i oraya yerlestirdigin ve onun time(NULL) ile cagirdigin icin, yeni bir numara bulana kadar en az 1 saniye gecmesi gerekiyor.

do dongulerinin icine printf satirlari yerlestirerek neler oldugunu izlemeni oneririm. Yaptigin isin ne kadar uzun surdugunu goreceksin.

Bu isin daha kolay bir yolu olmali... Her musteri icin ayri bir dosya tutmayi dusundun mu?

Ali

cycloner
18/01/2007, 03:28
abi cok saolasin ama ben sorunumu cozdum su an saat 3 bucuk ama olsun... ilgilendigin ciin cok sagol sole anlatiyim...
do{
srand(time(NULL));
mu.musno = ((rand()%998+1)*1000000) + ((rand()%998+1)*1000) + (rand()%998+1) ;
flag=0;
do{
iz = ' ';
fseek( musteri , sizeof(mu) * (i) , SEEK_SET );
fread (&iz , 1 , 1 , musteri);
if (iz != '*') break;
fread (&musnum , 4 , 1 , musteri); i++;
if(mu.musno == musnum) {flag = 1; break;}
}while(1);
}while(flag == 1);

o dongulerin son hali bu.... ne deisti sole soliyim izi her seferinde bosluga esitledim bolece strucku okumadiginda yani fread fonksiyonu 0 deger dondurmesi sonucu izin degeri son okunan degerden yani yildizdan farkli olup sonsuz donguden rahatca cikicakti... butun dongulerimi bu mantiga gore duzenledim ve program canavar gibi calisio :D:D cok tesekkurler random ile bir sorunum yok... ayni sayiyi uretmio :D:D srandi genel tanimlayamioz her derleyici kabul etmeyebilir.... iyi geceler...

acehreli
18/01/2007, 03:58
Sorununu cozdugune sevindim. Umarim yanlis bilgilerden de kurtulursun... :)

1) time'in duyarligi saniyedir. Sen time(NULL)'i ayni dOngU icinde cagirdigin surece, bir saniye icinde kac bin kere isletilirse isletilsin time(NULL) ayni degeri verir.

srand'i o ayni degerle cagirirsan, rastgele sayi dizisini hep ayni sayiyla ilklemis olursun.

O dOngunun icine bir printf yerlestirirsen goreceksin.

2) Ne demek istedigin anlamasam da srand'i "genel tanimla" demedim. srand'i programinda yalnizca bir kere cagir dedim.

Ali