• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C i podwojny odczyt z pliku binarnego

0 głosów
265 wizyt
pytanie zadane 12 listopada 2015 w C i C++ przez pred Nowicjusz (140 p.)

Witam.

1.Otwieram z pliku txt i laduje do struktury. Zaraz po tym zapisuje do pliku binarnego.

Chcialem pozniej odczytac z pliku binarnego i zapisac z powrotem do pliku txt ale zauwazylem ze odczytuje mi 2x ostatnia linijke. Za nic nie wiem dlaczego. 

Czekam na Wasze sugestie.

 

Pozdrawiam.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{

    struct lista
    {
        char name[20];
        int price;
    };

    struct lista shopping;

    FILE* file=fopen("zakupy.txt","r");
    FILE* fileb=fopen("lista.bin", "wt");
    FILE * filex=fopen("listax.txt","w");

    while(!feof(file))
    {
        fscanf(file, "%s", shopping.name);
        fscanf(file, "%d", &shopping.price);
        printf("co odczytalem? patrz!: %s %d\n", shopping.name, shopping.price);
        fwrite(&shopping,sizeof(struct lista),1,fileb);

    }

    fclose(fileb);

    fileb=fopen("lista.bin", "rb");

    int counter = 0;

    while(!feof(fileb))
    {
        fread(&shopping, sizeof(struct lista),1,fileb);
        printf("co odczytalem z pliku binarnego ?: %s %d\n", shopping.name, shopping.price);
        counter++;
        printf("%d \n", counter);

    }

fclose(file);fclose(filex);fclose(fileb);


    return 0;
}

co odczytalem? patrz!: pomidory 5
co odczytalem? patrz!: ogorki 3
co odczytalem? patrz!: kalafior 6
co odczytalem? patrz!: grejfruty 7
co odczytalem? patrz!: odzywki 40
co odczytalem? patrz!: mleko 2
co odczytalem z pliku binarnego ?: pomidory 5
1
co odczytalem z pliku binarnego ?: ogorki 3
2
co odczytalem z pliku binarnego ?: kalafior 6
3
co odczytalem z pliku binarnego ?: grejfruty 7
4
co odczytalem z pliku binarnego ?: odzywki 40
5
co odczytalem z pliku binarnego ?: mleko 2
6
co odczytalem z pliku binarnego ?: mleko 2
7

Process returned 0 (0x0)   execution time : 0.005 s
Press any key to continue.

1 odpowiedź

+2 głosów
odpowiedź 12 listopada 2015 przez furas Maniak (53,800 p.)

A może zapisuje Ci do pliku dwa razy.

Podczas wczytywania z "zakupyt.txt" nie sprawdzasz czy fscanf udało się coś wczytać. W pliku na końcu może być pusta linia (czyli wciąż nie jest spełniony eof) i powoduje to wywołanie fscanf, które nic nie wczytuje (czego nie sprawdzasz) a mimo to wywołujesz zapis do pliku "lista.bin".

Podobna sytuacja może być w drugiej pętli `while` - tam też nie sprawdzasz czy udało się coś odzytać a mimo to wypisujesz na ekran.

komentarz 12 listopada 2015 przez pred Nowicjusz (140 p.)
Dzieki za pomoc, poszlo :)

Podobne pytania

0 głosów
1 odpowiedź 326 wizyt
pytanie zadane 16 grudnia 2015 w C i C++ przez Sebastian R Obywatel (1,110 p.)
+1 głos
1 odpowiedź 262 wizyt
pytanie zadane 8 stycznia 2016 w JavaScript przez Stefan Początkujący (450 p.)
0 głosów
1 odpowiedź 239 wizyt

93,607 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,097 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...