ďťż

Ł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
  •