Ĺadny brzuch
char wiersz[10];
ifstream plik;
int ile = 0;
plik.open("test.txt");
if (plik.fail()) {
cout << "Nie moge otworzyc" << endl;
} else {
for(;;)
{
plik.getline(wiersz, sizeof(wiersz));
i++;
if (plik.eof())
break;
}
}
Wszystko ładnie działa, ale jeśli wiersz ma więcej niż 10 znaków to się zapętla w nieskończoność. Tak, wiem że można zwiększyć tablicę. Ale z czego wynika to zapętlanie ? Celem programiku miało być zliczanie linii w pliku.
Możliwe, że czyta tylko te 10 znaków i jeżeli koniec pliku jest w wierszu dłuższym od tych 10 znaków, to do niego nie dochodzi. Ale to takie spekulacje ;)
//EDIT: IMO lepiej byłoby w ogóle użyć pętli while - konstrukcja, którą zastosowałeś jest brzydka i "nie oddaje" tego, co program ma robić.
Użytkownik ROB4L edytował ten post 22 maj 2008, 18:16
zamiast tablicy weź obiekt klasy string ;]
A nie latwiej po prostu zliczyc ilosc \n w pliku? ;]
Moim zdaniem wziąć jest lepiej obiekt string niż tablicę, a według mnie dlatego tak się po 10 znakach dzieje, ponieważ tablica jest 10-elementowa. A "warunkiem" zakończenia pobierania w getline jest wielkość "wiersz", czyli sizeof. To może być tego powodem. Ale według mnie lepiej wziąć klasę string.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Wszystko ładnie działa, ale jeśli wiersz ma więcej niż 10 znaków to się zapętla w nieskończoność. Tak, wiem że można zwiększyć tablicę. Ale z czego wynika to zapętlanie ? Celem programiku miało być zliczanie linii w pliku.
Możliwe, że czyta tylko te 10 znaków i jeżeli koniec pliku jest w wierszu dłuższym od tych 10 znaków, to do niego nie dochodzi. Ale to takie spekulacje ;)
//EDIT: IMO lepiej byłoby w ogóle użyć pętli while - konstrukcja, którą zastosowałeś jest brzydka i "nie oddaje" tego, co program ma robić.
Użytkownik ROB4L edytował ten post 22 maj 2008, 18:16
zamiast tablicy weź obiekt klasy string ;]
A nie latwiej po prostu zliczyc ilosc \n w pliku? ;]
Moim zdaniem wziąć jest lepiej obiekt string niż tablicę, a według mnie dlatego tak się po 10 znakach dzieje, ponieważ tablica jest 10-elementowa. A "warunkiem" zakończenia pobierania w getline jest wielkość "wiersz", czyli sizeof. To może być tego powodem. Ale według mnie lepiej wziąć klasę string.