• 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

Object Storage Arubacloud
0 głosów
171 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ź 276 wizyt
pytanie zadane 16 grudnia 2015 w C i C++ przez Sebastian R Obywatel (1,110 p.)
+1 głos
1 odpowiedź 121 wizyt
pytanie zadane 8 stycznia 2016 w JavaScript przez Stefan Początkujący (450 p.)
0 głosów
1 odpowiedź 194 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...