Wczytywanie pliku txt - dlaczego wartość wyświetla się dwa razy?

0

Witam

dlaczego dla tego pliku http://home.agh.edu.pl/~patrick/zao/sim2014/lab1/matrix3.txt

dla poniższego kodui :

 
do {
		//while (!plikWejsciowy.eof()) {
		plikWejsciowy >> liczbaTmpString;
		cout << "liczbaTmpString = " << liczbaTmpString << endl;

}while (!plikWejsciowy.eof());

Ostatnia wartość 0.16 wyświetla mi się dwa razy??

przycięcie posta - Furious Programming

1

Bo nie robisz tego jak czlowiek.

while(in >> str) { ... }
1

Ponieważ poprawnie się odczytuje tak:

while(plikWejsciowy>>liczbaTmpString)  cout<<"liczbaTmpString = "<<liczbaTmpString<<endl;

istream stwierdza że jest stan eof dopiero po nieudanej próbie odczytu.

0

wiem, że mozna też tak zrobić

tylko zastanawiam dlaczego 2x0.16 a nie 0x16 i EOF ?
Czy istnieje jeszcze jakaś inna metoda sprawdzenia bez przechodzenia po pliku, ponieważ muszę zczytac wszystkie dane z pliku, aż do ich końca.

0

Przeczytaj post powyzej.

  • Prawdopodobnie potrzebujesz sie zapoznac z klasami: std::vector<>, istream_iterator<> i funkcja for_each.
0
Nimagu napisał(a):

tylko zastanawiam dlaczego 2x0.16 a nie 0x16 i EOF ?

plikWejsciowy >> liczbaTmpString; - wczytano ostatni wiersz, ale eof jeszcze nie ustawiony.
na następnym obrocie pętli, operacja: plikWejsciowy >> liczbaTmpString; - nie powodzi się z powodu końca pliku (eof się ustawia podczas tej nieudanej operacje), zmienna liczbaTmpString oczywiście nie zmieniła swojej wartości, mimo wszystko twój kod z uporem maniaka nie patrząc na to że operacja się nie powiodła wyświetla jeszcze raz ostatnio odczytaną wartość.

Nimagu napisał(a):

Czy istnieje jeszcze jakaś inna metoda sprawdzenia bez przechodzenia po pliku, ponieważ muszę zczytac wszystkie dane z pliku, aż do ich końca.

Po kiego ci inna metoda?

0

Wektora i mapa juz wykorzystuję w projekcie.
O istream_iterator<> i funkcja for_each. nie słyszałem więc zagłębie się w lekturkę.
Dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1