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

ANSI C przedwczesne wykrywanie końca pliku

Object Storage Arubacloud
0 głosów
238 wizyt
pytanie zadane 1 czerwca 2017 w C i C++ przez Żyrosławw Bywalec (2,300 p.)

Cześć!

Mam taki problem, pisze sobie kompresje i dekompresje plików w C, a właściwie napisałem na Linuksie.

Jednak po kompilacji na Windows program nie działa poprawnie, a mianowicie podczas dekompresji wykrywa przedwcześnie koniec pliku (EOF), więc na przykład plik po kompresji waży kilkadziesiąt kb, a po dekompresji kilkadziesiąt bajtów.

Pętla wygląda tak:



    while(fscanf(inputFile, "%c", &buffer)!=EOF)
    {
        while(bufferIter<8)
        {
            unsigned char mask = 128;
            mask = mask>>bufferIter;
            bufferIter++;

            if(buffer&mask) tmp = tmp->right;
            else tmp = tmp->left;

            if(tmp->c>0)
            {
                fprintf(outputFile, "%c", tmp->c);
                tmp = root;
            }
        }
        bufferIter = 0;
    }

To co w środku while to dekompresja, więc nie powinno mieć żadnego wpływu na działanie pętli.

O dziwo na linuksie działa bezbłędnie niezależnie od pliku :/

2 odpowiedzi

+1 głos
odpowiedź 1 czerwca 2017 przez tangarr Mędrzec (154,860 p.)
wybrane 1 czerwca 2017 przez Żyrosławw
 
Najlepsza
Prawdopodobnie otwierasz plik w trybie tekstowym.
Edit:
fscanf zwraca ilość wypełnionych zmiennych, użyj fgetc.
komentarz 1 czerwca 2017 przez Żyrosławw Bywalec (2,300 p.)
Wielkie dzięki!

To rozwiązało problem, zapisywałem w trybie binarnym, a odczytywałem w tekstowym, moje niedopatrzenie!
0 głosów
odpowiedź 1 czerwca 2017 przez Patrycjerz Mędrzec (192,320 p.)
Nie znam powodu problemu, ale polecam sprawdzić, przy którym znaku program wychodzi z pętli. Strzelam, że ma to związek z różną reprezentacją znaku nowej linii w systemach Windows i Linux, ale mogę się mylić.

Podobne pytania

0 głosów
0 odpowiedzi 107 wizyt
pytanie zadane 16 marca w C i C++ przez Wojo772233 Początkujący (350 p.)
0 głosów
1 odpowiedź 378 wizyt
+1 głos
2 odpowiedzi 455 wizyt
pytanie zadane 27 listopada 2016 w Java przez Kornelia Kobiela Nałogowiec (33,340 p.)

92,570 zapytań

141,423 odpowiedzi

319,643 komentarzy

61,958 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!

...