Niepoprawny odczyt z pliku

0

Witam, dlaczego po wykonaniu tego kodu:

#include <iostream>
#include <conio.h>
#include <stdio.h>

int main()
{
    FILE* ilosc,*cena;
    int ilosc_i = 0;
    float cena_jednostkowa = 0.0f;
    ilosc = fopen("ilosc.txt","wb");
    if (ilosc == NULL)
    {
              std::cout << "Nie udalo sie utworzyc pliku." << std::endl;
              return -1;
    }
    cena = fopen("cena.txt","wb");
    if (cena == NULL)
    {
              std::cout << "Nie udalo sie utworzyc pliku." << std::endl;
              return -1;
    }
    while(true)
    {
              std::cout << "Podaj ilosc: ";
              std::cin >> ilosc_i;
              if (ilosc_i == 0)
                 break;
              fwrite(&ilosc_i,sizeof(int),1,ilosc);
              std::cout << "Podaj cene jednostkowa: ";
              std::cin >> cena_jednostkowa;
              fwrite(&cena_jednostkowa,sizeof(float),1,cena);
    }
    fclose(ilosc);
    fclose(cena);
    
    ilosc = fopen("ilosc.txt","rb");
    if (ilosc == NULL)
    {
              std::cout << "Nie udalo sie utworzyc pliku." << std::endl;
              return -1;
    }
    cena = fopen("cena.txt","rb");
    if (cena == NULL)
    {
              std::cout << "Nie udalo sie utworzyc pliku." << std::endl;
              return -1;
    }
    
   
    while(!feof(ilosc))
    {
              fread(&ilosc_i,sizeof(int),1,ilosc);
              fread(&cena_jednostkowa,sizeof(float),1,cena);
              std::cout << ilosc_i << " " << cena_jednostkowa << std::endl;
    }
    fclose(ilosc);
    fclose(cena);
    
    getch();
    return 0;
}
 

Otrzymuję o jedną za dużo linijkę przy wypisywaniu ilości i ceny jednostkowej? Ta dodatkowa linijka zawsze jest powtórzeniem ostatnim poprawnej czyli jeśli powinienem dostać:

4 2.2
3 2.3
4 4.5

To dostaje:

4 2.2
3 2.3
4 4.5
4 4.5

0

W pętli odczytującej dane jako warunek użyj wartości zwracanej przez fread(), a nie feof().

0

Dzięki wielkie, działa.
Mógłbym się jeszcze dowiedzieć czemu wersja z feof nie działała poprawnie?

0
http://www.binboy.org/c-cpp/faq/158/W_jaki_sposob_wykryc_koniec_pliku.html
0

Okej, już rozumiem. Wielkie dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1