while(!feof(dosya)) sorunu

aysesule
03-05-2008, 14:34   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
15 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

Arkadaslar
rewind(dosya);
rewind(dosya2);
while(!feof(dosya))
{
  fscanf(dosya,........);
  fprintf(dosya2,......);
}

bu kod parcasında nıye dosya daki son kaydı dosya2 ye ıkı kere yazıyo aslında su an nedenini öğrenmekten cok cozumune ıhtıyacım var yardımcı olursanız cokk sevinicem.şimdiden teşekkürler...

Son Düzenleme: aysesule ~ 03 Mayıs 2008 14:42
eolos
03-05-2008, 14:45   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
2,036 mesaj
Kayıt Tarihi:Kayıt: May 2006

kişi sayısı yada okudugun veri değeri belliyse for dongusu kullan daha rahat edersin

aysesule
03-05-2008, 14:51   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
15 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

Hayır belli degil okutmada cok sorun olmuyo whiledan cıkısta 1 azaltıyorum ama dosyaya yazmada sorun oluyor ordanda baska bir dosyaya yazınca son kayit 3 kere yazılmış oluyo yani boyle artarak devam ediyo her turlu cozumu denedim ama netice alamadım,yeni cozumleri bekliyorum???????

eolos
03-05-2008, 17:08   |  #4  
Yıllanmış Üye
Teşekkür Sayısı: 0
2,036 mesaj
Kayıt Tarihi:Kayıt: May 2006

bak başka bi tavsiye de şu o data dosyasının içindeki verileri kopyala git exele yapıstır ozman sayı belli olur sonra forla dene ben her zman oyle yaparım while problemli biraz heleki dosyada char tanımlı bişey varsa işin içinden cıkmaz zor oluyor

aysesule
03-05-2008, 21:45   |  #5  
OP Taze Üye
Teşekkür Sayısı: 0
15 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

Yardımların için sagol
rewind(dosya);
rewind(dosya2);
fscanf(dosya,........);
while(!feof(dosya))
{

fprintf(dosya2,......);
fscanf(dosya,........);
}

yapınca düzeldi ama hala goze carpmayacak bi yerde hata veriyo onu da artık kabullendim.

eolos
03-05-2008, 23:57   |  #6  
Yıllanmış Üye
Teşekkür Sayısı: 0
2,036 mesaj
Kayıt Tarihi:Kayıt: May 2006

rewind(dosya);
rewind(dosya2);
fscanf(dosya,........);
burdaki fscanf bişeye yaramıyo farkındasın demi ayrıca bu program once scan etmeden nasıl bişe bastırıyor :)  ilginc c işte ne yapacagı belli olmuyor

Alibaba
04-05-2008, 01:32   |  #7  
Yıllanmış Üye
Teşekkür Sayısı: 0
427 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

neden yaramadığını düşünüyorsun?

C ne yapacağı kesin olan dillerden biridir.
beklentileriyle mantığı çatışan ise insanın kendisidir.

algoritmanız hatalıysa C de o hatayı çalıştırır sadece.

okuma işleminizin dosya sonu bilgisi döndürüp döndürmediğine bakmadan yazdırma işlemi yapıyorsunuz.
dosya sonu okumaya kalktığınızda anlaşılacak bir durumdur, son satırı bile okumuş olsanız dosya sonu demez.
çünkü dosyalar rastgele erişimli sistemlerdir, sizin sırayla okumanızla ilgilenmez. o kodun herhangi bir yerinde fseek de olabilirdi yani.

eolos
rewind(dosya);
rewind(dosya2);
fscanf(dosya,........);
burdaki fscanf bişeye yaramıyo farkındasın demi ayrıca bu program once scan etmeden nasıl bişe bastırıyor :)  ilginc c işte ne yapacagı belli
Alibaba
04-05-2008, 01:36   |  #8  
Yıllanmış Üye
Teşekkür Sayısı: 0
427 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

nerde, ne hatası veriyor?

aysesule
Yardımların için sagol
rewind(dosya);
rewind(dosya2);
fscanf(dosya,........);
while(!feof(dosya))
{

fprintf(dosya2,......);
fscanf(dosya,........);
}

yapınca düzeldi ama hala goze carpmayacak bi yerde hata veriyo onu da artık kabullendim.

aysesule
04-05-2008, 01:44   |  #9  
OP Taze Üye
Teşekkür Sayısı: 0
15 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

Ödevim telefon rehberi kayit ekle,kayit sil,kayitgörüntüle ve kayit ara diye 4 ana fonksiyon var.kayit sil dışında boyle yapınca oluyo ama kayit silde son kayıt yıne farklı yazılıyo anlamadım kodda cok uzun oldugu icin buraya koymadım kımse ıncelemez dıye sorunu bulmak icin hepsini gormek gerekıyor sanırım(o da 650 satıra yakın)ve diger fonk icinde de kayit sil cagırmam gerekıyo bazı durumlarda bu da ıkıncı hata olusturuyo aslında goze carpmayacak bir hata degılde:((ve odev teslım yrn saat 23:59):(

Alibaba
04-05-2008, 02:06   |  #10  
Yıllanmış Üye
Teşekkür Sayısı: 0
427 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

650 satır çok sayılmaz, profesyonel hayatta yüzbinlerce satırla boğuşmak gerekiyor. :)

doğrudan fiziksel kayıt silmek diye birşey yoktur biliyorsun.
yapman gereken, silinecek kaydın başına ulaşıp kayıt boyu kadar boşluk
ya da 0x0 yazdırmak, orayı silinmiş kabul etmektir.
fiziksel olarak o kayıttan kurtulmak içinse,
silinen kayıttan sonraki bütün kayıtları bir kayıt geriye kopyalamak, ya da
en son kaydı silinenin yerine kopyalamak, ardından son kaydın başına konumlanıp dosyayı truncate etmek gerekir. dosyanın boyu 1 kayıt kısalacaktır.

kayıt silmeyi şöyle yapacaksın:
silinecek kaydı dosyayı sırayla okuyarak bul.
bulduysan bir kayıt geriye konumlanıp(kaydın başı) yukarıda anlattığım yöntemlerden birini uygula.

konuyu kafanda daha somut canlandırmak için,
dosyayı bir terzi mezurası, kayıtların herbirini santim aralıkları, dosyaya konumlanmayı da belli bir santim noktasının başından itibaren işlem yapmak olarak hayal edebilirsin.  

Son Düzenleme: Alibaba ~ 04 Mayıs 2008 02:14
eolos
04-05-2008, 12:31   |  #11  
Yıllanmış Üye
Teşekkür Sayısı: 0
2,036 mesaj
Kayıt Tarihi:Kayıt: May 2006
Alibaba
neden yaramadığını düşünüyorsun?

C ne yapacağı kesin olan dillerden biridir.
beklentileriyle mantığı çatışan ise insanın kendisidir.

algoritmanız hatalıysa C de o hatayı çalıştırır sadece.

okuma işleminizin dosya sonu bilgisi döndürüp döndürmediğine bakmadan yazdırma işlemi yapıyorsunuz.
dosya sonu okumaya kalktığınızda anlaşılacak bir durumdur, son satırı bile okumuş olsanız dosya sonu demez.
çünkü dosyalar rastgele erişimli sistemlerdir, sizin sırayla okumanızla ilgilenmez. o kodun herhangi bir yerinde fseek de olabilirdi yani.

eolos
rewind(dosya);
rewind(dosya2);
fscanf(dosya,........);
burdaki fscanf bişeye yaramıyo farkındasın demi ayrıca bu program once scan etmeden nasıl bişe bastırıyor :)  ilginc c işte ne yapacagı belli
kodda algoritmada bir yanlıslık oldugunu hissettim de ondan ole dedim ayrıca zaten 2 mizde aynı seyleri soylemisiz