• 20.04.2024, 17:59
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

feof problem in C?

Donnerstag, 4. März 2004, 20:24

Hy zusammen
ich sitze wiedermal an einem C Programm um etwas für die Klausur zu lernen.
Also hab ich mir mal ein Programm ausgedacht was man auch benutzen könnte. Es soll eine Reifenlagerdatenbank werden.
Das einlesen scheint soweit auch zu funktionieren, nur an der Ausgabe der kompletten Datei verzweifle ich hier fast.

Das Programm scheint da Eigenleben zu entwickeln :(
mal gibt es dies aus mal das.
Fast immer gibt es den letzten Eintrag in der Datenbank doppelt aus.
Also scheint was nicht mit der Abbruch bedingung zu stimmen.
Da ich es aber unbedingt mit fread und fwrite hinbekommen möchte und nicht mit fscanf sehe ich da nur die möglichkeit mit diesen feof, aber das arbeitet anscheinend nicht so wie ich es mir vostelle.

Wenn da jemandem was zu einfällt wäre ich echt froh.
Falls ihr fragen zum Prog habt bitte stellen.
Ich kann immer schlecht nachvollziehen wie einsichtlich so ein Programm ist.

hier der link: http://home.arcor.de/grenzgebiet4/reifen.c

Vielen Dank gruß
Ö

Re: feof problem in C?

Donnerstag, 4. März 2004, 20:32

Hi

Wenn ich mich nicht täusche kannst du eof so bekommen

if(EOF==fread(....))
{
//Ende der Datei
}

Bin mir aber ned sicher. Also einfach mal ausprobiern ;D
Cu Hurra

Re: feof problem in C?

Donnerstag, 4. März 2004, 20:33

hy

ich probiers mal

danke
Ö

Sooo: hab das Programm jetzt geändert und der abbruch läuft besser. nur jetzt verschluckt er mir den zweiten eintrag aus der datenbank, wenn 3 drinn sind :(

ich hab die datei oben vom link aktualisiert.

danke
Ö


und die nächste

sorry hurra aber die eof abfrage von fread bringt anscheinend nichts. ob sie drin ist oder nicht er schreibt immer den letzten eintrag doppelt.

hab die datei vom link wieder aktualisiert.

Re: feof problem in C?

Donnerstag, 4. März 2004, 21:05

also was ich heute mittag im chip forum gelesen hab, soll dieses feof womit ich die do while schleife beenden möchte
erst reagieren, wenn eof überschritten wurde.

da ich aber mit fread blockweise einlese und beim letzten eintrag dann genau aufm ende stehe reagiert feof noch nicht
erst beim nächsten durchlauf.

ich hab auch probiert mit fseek den file pointer über eof zu treiben damit feof reagiert, aber das geht nach hinten los.
fseek verlängert dann anscheinen die datei oder geht über eof hinaus.

bei mir ist echt nur noch ???

Ö

Re: feof problem in C?

Donnerstag, 4. März 2004, 21:44

Hi

1.Ka
2. Zumindest bei fscanf gehts:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
      FILE *fp=fopen("test.txt","r");
      char s[100];
      while(EOF!=fscanf(fp,"%s",s))
      {
            printf("%s",s);
      }
      fclose(fp);
      return 0;
}


Bye

Re: feof problem in C?

Freitag, 5. März 2004, 00:44

Also erstmal wenn du das mit einer do_while Schleife pronierst wirt das eh nix ;)

Quellcode

1
2
3
4
5
6
7
8
9
RETURN VALUE
       fread  and  fwrite return the number of items successfully
       read or written (i.e., not the number of characters).   If
       an error occurs, or the end-of-file is reached, the return
       value is a short item count (or zero).

       fread does not distinguish between end-of-file and  error,
       and  callers  must  use feof(3) and ferror(3) to determine
       which occurred.

also mit while(fread(elem,sizeof (struct eintrag),1,fp)==1)
{ ...}
sollte dein Programm dann auch funktionieren...
hth

[edith]
war natürlich nen Fehler drin ;D
[/edith]
c++: The power, elegance and simplicity of a hand grenade.

Re: feof problem in C?

Freitag, 5. März 2004, 19:34

Hy
dank dir clark

funktioniert blendend so.

wieder was gelernt.

dank dir

gruß
Ö