Cześć,
na zajęciach z programowania pisaliśmy programik w C liczący ilość wierszy w pliku. Po przepisaniu go na moim komputerze do Anjuty, po pomyślnej kompilacji, przy próbie uruchomienia wywala błąd
Na komputerze z laboratorium taki właśnie program działał poprawnie. Tak, wyświetliło ambitny tekst "Ale jestem gupi" Twojego autorstwa i program się zakończył - czyli do tego miejsca działa poprawnie. Ale nie wiem czy starasz się pomóc czy po prostu śmiejesz się ze mnie.
Aj ale głupota... ethanak, kod jest prawidłowy, tylko dla pliku, który jest w odpowiednim folderze. A ja go zakopałem za głeboko. Mimo to, dziękuję, bo się pouczyłem przez Ciebie.
Jeśli umieszczę plik, którego linijki liczę w odpowiednim miejscu, to program działa bez sygnału 11. Jeśli chciałbym zrobić to porządniej dodałbym linijkę, że jeśli nie ma pliku, to drukuje odpowiedni napis.
Co nie zmienia faktu że program, który zdycha z 11 nie jest prawidłowy.
BTW masz inny błąd - program źle liczy linie, czyli kod który się skomplikował i się pięknie wykonuje wcale nie musi być od razu prawidłowy
@wojtos
weź sobie zamień tego double* na void bo i tak nie wyrzucasz żadnej wartości
zmień też char z na int z bo i tak otrzymujesz tym fgetc wartość w int, jeśli nie to zastosuj konwersje z int na char (ale taką poprawną)
jak już zdecydujesz się zamienić double* na void to możesz też zmienić return null; na return; (ot tak żeby nie mieć warrnów)
no a tak to chyba git;)
ostatni kompilator który to dopuszczał to był SAS/C na Amigę.
BTW po chusteczkę Ci potrzebna tablica line[]?
Poza tym nie chodzi o rozpoznawanie końca linii - przy liczeniu wierszy masz rozpoznać początek a nie koniec - niestety, nawet najlepszy kod nie poprawi błędu algorytmu.
no tak, ma
ale to że samemu sobie dodasz \n to nie oznacza że program to zauważy jako nową linie
bo zobaczy to jako \\n więc się nie będzie liczyło, zauważ że w txtburnie dodałem to aby konwertował \n na \\n z pliku językowego bo inaczej nie chciał tego uznać za znak nowej linii
Nie o to chodzi - nie łapiesz tematu? \n to dla mnie znak o kodzie 10 (dziesiętnie) a nie 'backslash n'.
Ogólnie chodzi o to, że ostatnia linia w pliku wcale nie musi kończyć się znakiem nowej linii.
Ogólnie zakładając że program czyta ze stdin:
muszą dać ten sam wynik.
Aha, i nie sugeruj się poleceniem "wc -l" (różne wyniki w powyższych poleceniach) - Wielka Xięga Proroka Manuala mówi wyraźnie: