Wczytywaniem z pliku za pomocą strumienia

0

Siema.
Kod wygląda tak:

	fstream plik;
	plik.open("map_obj.txt", ios::in);

	string dane[3];

	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < i; j++)
		{
			plik >> dane[0] >> dane[1] >> dane[2];
			cout << dane[0] << " " << dane[1] << " " << dane[2] << endl;
		}
	}

	plik.close();

	system("pause");

Gdy w pierwszym for zamiast 4 wpisze 3 to wszystko jest okej ale gdy 4 to już się krzaczy i powtarza ostatni wpis:

id nazwa kategoria
1 kot.txt 1
2 okon.bmp 4
3 kon.jpg 1
3 kon.jpg 1
3 kon.jpg 1

A tak wygląda plik:

id nazwa kategoria
1 kot.txt 1
2 okon.bmp 4
3 kon.jpg 1
0

niezla historia, po co ci 2 petle?

0

Co ciekawego według Ciebie ma oddać plik, skoro skończyły się w nim dane?

1
#include <iostream>
#include <string>
using namespace std;

int main(){
	string str;
	while(getline(cin, str))
		cout << str << endl;
	return 0;
}

out:

id nazwa kategoria
1 kot.txt 1
2 okon.bmp 4
3 kon.jpg 1
  • do rozdzielenia:
istringstream iss(str);
vector<string> tokens{
    istream_iterator<string>{iss},
    istream_iterator<string>{}
};

Alternatywą jest użycie copy_n ze współpracą z istream_iteratorami i uważaniem na poprawność pliku lub - jeżeli nie zależy nam na żadnym podziale - ten kod:

#include <iostream>
#include <iterator>
using namespace std;

int main() {
	copy(
		istreambuf_iterator<char>(cin),
		istreambuf_iterator<char>(),
		ostreambuf_iterator<char>(cout)
	);
	return 0;
}
0
katelx napisał(a):

niezla historia, po co ci 2 petle?

Ogólnie rzecz biorąc zawsze używałem getline pobierając po linijkach ale teraz pierwszy raz strumieniem i są problemy, za pomocą 1 to mi nie wychodziło, tkz. zawsze zwracało pierwszą linijkę. Jak miałem 3 dane to chodziło bez problemu i myślałem że jest okej no ale jak dodałem kolejny to się zdziwiłem.

spartanPAGE napisał(a):

Co ciekawego według Ciebie ma oddać plik, skoro skończyły się w nim dane?

Czytaj post do końca!! Przecież napisałem że powiela ostatnią linijkę.

0

Nie powielałby, gdyby twój kod miał sens. Teraz podnieś wzrok do góry i użyj sensownego rozwiązania.

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