Konuyu görüntüle
IUCODERS FORUM > Duyurular > Okul ile ilgili > C++ - Telefon Rehberi ödevi.
Yazar
kartane


avatar
istanbul
Kayıt: 22.02.2007
30.04.2008-15:46 #43743
while(!feof(dosya))
{
fscanf(dosya,......);
kayit++;
}

niye son kayidi iki kere okuyo,
if(feof(dosya))
break;
yazdım fscanf sonra ama yıne aynı okuyo ???yazmada da aynı durum gecerli





Yazar
naranja


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
30.04.2008-16:02 #43746
kartane yazdi
 
while(!feof(dosya))
{
fscanf(dosya,......);
kayit++;
}

niye son kayidi iki kere okuyo,
if(feof(dosya))
break;
yazdım fscanf sonra ama yıne aynı okuyo ???yazmada da aynı durum gecerli


aynı sorunu ben de yaşıyorum, şimdi kayıt yaparken kaydın sonuna "slash n"
koyduğun için txt dosyasının en altına bi boşluk koyuyor, sonra okuturken de dosya sonu son kayıt ta değil de boşlukta bittiği için son kaydı bi kez daha okuyor.





Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.






Yazar
kartane


avatar
istanbul
Kayıt: 22.02.2007
30.04.2008-16:21 #43748
Cozum ne olabilir acaba???worried





Yazar
naranja


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
30.04.2008-16:43 #43749
ben de çok merak ediyorum nasıl olabilir acaba?





Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.






Yazar
marakana


avatar

Kayıt: 08.03.2007
30.04.2008-16:53 #43750
Kayıtları ekleyince mesela; kayıt arada son kaydı aradığımda ekrana 2 defa yazıyodu.bende kayıt aramada dosyayı okurken

while(!feof(dosya))
{
fscanf(dosya,......);
 
if(feof(dosya))
break;

böyle yazdım ve sorun cözüldü.bu sorunu yasadığım tüm fonksiyonlarda aynı sekilde fscanf in altına bunu yazdım.Sizde niye işe yaramıyor anlamadımbeat up







Yazar
naranja


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
30.04.2008-17:41 #43751
marakana yazdi
 
Kayıtları ekleyince mesela; kayıt arada son kaydı aradığımda ekrana 2 defa yazıyodu.bende kayıt aramada dosyayı okurken

while(!feof(dosya))
{
fscanf(dosya,......);
 
if(feof(dosya))
break;

böyle yazdım ve sorun cözüldü.bu sorunu yasadığım tüm fonksiyonlarda aynı sekilde fscanf in altına bunu yazdım.Sizde niye işe yaramıyor anlamadımbeat up


iyi hoş diyosun da, şimdi 1 kayıt olduğunu düşün, fscanf kaydı okuyor ve dosya sonu geliyor daha fscanf le okuttuğun değerleri bi yere atmadan döngü sonlanıyor, yani son kayıt boşuna okutulmuş oluyor.





Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.






Yazar
marakana


avatar

Kayıt: 08.03.2007
30.04.2008-18:01 #43752
naranja yazdi
 
iyi hoş diyosun da, şimdi 1 kayıt olduğunu düşün, fscanf kaydı okuyor ve dosya sonu geliyor daha fscanf le okuttuğun değerleri bi yere atmadan döngü sonlanıyor, yani son kayıt boşuna okutulmuş oluyor.

walla haklısın ama sacmada olsa derdime care buldum napimd oh bu feof'un dosya sonu anlayışı bizle uyuşmuyor bencesad
Bu konuyu daha öncede tartışmışız ve arkadasımız söyle bir çözüm önermiş:

hamdikan yazdi

while(1)
{
int abc=fgetc(dosya);
if(abc==EOF)
{
break;
}
fread(&ogr,sizeof(struct ogrenci),1,dosya);
kayitSayisi++;
} 


bide bunu dene istersen







Yazar
neurorebel


avatar

Kayıt: 15.08.2007
30.04.2008-20:20 #43761
yukarıdaki kodda bir sorun oluşabilir sanırım (yanılıyorsam aydınlatın:) ) eğer fgetc() ile aldığımız karakter EOF değilse o an okumakta olduğumuz struct verisine ait olacak. bu durumda takip eden okumalarda veriler bir byte kaymış olmayacak mı ?nerd

edit:
son kaydı 2 kez okuma sorununu fread() ve fscanf() fonksiyonlarının dönüş degerlerini kontrol ederek çözebilirsiniz:

örn:
....

while(!feof(dosya))
{
     if (fread(...)) // ya da if(fscanf(...))
     {
         // veriyi isle(struct olustur diziye at vs.)
     }
}






Do weird and difficult things.

Yazar
kartane


avatar
istanbul
Kayıt: 22.02.2007
30.04.2008-20:48 #43762
neurorebel yazdi
 
yukarıdaki kodda bir sorun oluşabilir sanırım (yanılıyorsam aydınlatın:) ) eğer fgetc() ile aldığımız karakter EOF değilse o an okumakta olduğumuz struct verisine ait olacak. bu durumda takip eden okumalarda veriler bir byte kaymış olmayacak mı ?nerd


Haklısın denedim zaten olmadı,yok mu bunu çözümü???worried





Yazar
neurorebel


avatar

Kayıt: 15.08.2007
30.04.2008-20:51 #43763
edit yaptım cevaba bir de onu dene istersenconfused





Do weird and difficult things.

Yazar
sinan61


avatar
TRABZON
Kayıt: 05.12.2006
30.04.2008-20:54 #43765
naranja yazdi
 
kartane yazdi
 
while(!feof(dosya))
{
fscanf(dosya,......);
kayit++;
}

niye son kayidi iki kere okuyo,
if(feof(dosya))
break;
yazdım fscanf sonra ama yıne aynı okuyo ???yazmada da aynı durum gecerli


aynı sorunu ben de yaşıyorum, şimdi kayıt yaparken kaydın sonuna "slash n"
koyduğun için txt dosyasının en altına bi boşluk koyuyor, sonra okuturken de dosya sonu son kayıt ta değil de boşlukta bittiği için son kaydı bi kez daha okuyor.


kaydederken slash n i sona değil başa koy sorunun çözülür..yani ilk satır boş olsun!






Nobody live like me!!!




Yazar
kartane


avatar
istanbul
Kayıt: 22.02.2007
30.04.2008-20:56 #43766
burda if'in içindeki fscanf neye esitleyecem???





Yazar
kartane


avatar
istanbul
Kayıt: 22.02.2007
30.04.2008-20:58 #43767
sinan61 yazdi
 
naranja yazdi
 
kartane yazdi
 
while(!feof(dosya))
{
fscanf(dosya,......);
kayit++;
}

niye son kayidi iki kere okuyo,
if(feof(dosya))
break;
yazdım fscanf sonra ama yıne aynı okuyo ???yazmada da aynı durum gecerli


aynı sorunu ben de yaşıyorum, şimdi kayıt yaparken kaydın sonuna "slash n"
koyduğun için txt dosyasının en altına bi boşluk koyuyor, sonra okuturken de dosya sonu son kayıt ta değil de boşlukta bittiği için son kaydı bi kez daha okuyor.


kaydederken slash n i sona değil başa koy sorunun çözülür..yani ilk satır boş olsun!



bu fprintfde de gecerli bu seferde son kaydı iki kere yazıyo,okumayı oyle hallettimde....





Yazar
cengineer


avatar

Kayıt: 27.10.2006
30.04.2008-21:18 #43770
extreme yazdi
 
2. Ödev biraz daha görsel ve biraz daha algoritma ağırlıklı olsa yada 2-3 kişi gruplu ve birazbiggrin daha zor olsa daha güzel olur.biggrin


Zaten dürtmeyle yürüyoruz basit ödevleri dahi son güne bırakıyoruz zor olursa daha erken başlayıp uğraşırız .Ayrıca batak a alternatif bi proje istiyoruz mümkünsebiggrin





" Her arayan bulamayabilir ancak bulanlar arayanlardir..! " Imam-i Rabbâni




Yazar
neurorebel


avatar

Kayıt: 15.08.2007
30.04.2008-21:39 #43773
kartane yazdi
 
burda if'in içindeki fscanf neye esitleyecem???


birşeyle karşılaştırmana gerek yok (== kastediyorsun sanırım :) )

edit:

yine olmazsa

if (fread(..) > 0){...}

ya da

if (fscanf(..) > 0){..}

denenerd







Do weird and difficult things.

1 2 3 4 5 6 7
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb