Avatar billede palle_pirat Nybegynder
31. juli 2009 - 04:47 Der er 5 kommentarer og
1 løsning

sizeof() og tellg()

Hej eksperts

Jeg sidder med en bog af Henrik Tange, og der er et eksempel som jeg prøver at efterligne, men jeg får et negativt resultat og kan ikke helt se hvor fejlen ligger.

I funktionen int Auto::hentAntal():
int Auto::hentAntal()
{

    s.seekg(0, ios::end);
    int antal = static_cast<int>( s.tellg()/sizeof(Auto));
    cout << antal;
    return antal;
}

Jeg mistænker denne sætning: int antal = static_cast<int>( s.tellg()/sizeof(Auto));
Er den lovlig?
Avatar billede arne_v Ekspert
31. juli 2009 - 04:55 #1
Den ser rigtigt ud.

Gå til enden af filen og divider byte offset af positon med størrelsen på elementer så har man antal elementer.

Kaldet til tellg returnerer -1 ved fejl, så check om filen er OK.

Jeg vil næsten tro at:

int antal = static_cast<int>( s.tellg()/sizeof(Auto));

skulle være:

int antal = static_cast<int>( s.tellg() ) / sizeof(Auto);

men den cast er ikke nødvendig så vidt jeg ved.
Avatar billede palle_pirat Nybegynder
31. juli 2009 - 05:15 #2
Endnu engang tak, arne. Den lille parentes ændring i programmet fik det til at køre.

Læg svar.
Avatar billede palle_pirat Nybegynder
31. juli 2009 - 05:22 #3
Hov, den ville ikke helt som jeg havde troet.


Får compiler fejl efter at ha' ændret i funktionen:
int Auto::hentAntal()
{
   
    int test = 0;
    test = s.seekg(0, ios::end);
    cout << test << endl;
    int antal = static_cast<int>( s.tellg())/sizeof(Auto);
    cout << antal;
    return antal;
}
Avatar billede palle_pirat Nybegynder
31. juli 2009 - 05:24 #4
Lavede test om til en bool, begynderfejl...
Avatar billede arne_v Ekspert
01. august 2009 - 05:24 #5
all set then ?
Avatar billede palle_pirat Nybegynder
01. august 2009 - 22:13 #6
Ja, mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester