• 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

42 Warsaw Coding Academy
0 głosów
281 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 (155,180 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 225 wizyt
pytanie zadane 16 marca 2024 w C i C++ przez Wojo772233 Początkujący (480 p.)
0 głosów
1 odpowiedź 597 wizyt
+1 głos
2 odpowiedzi 524 wizyt
pytanie zadane 27 listopada 2016 w Java przez Kornelia Kobiela Nałogowiec (33,340 p.)

93,377 zapytań

142,379 odpowiedzi

322,528 komentarzy

62,726 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...