Program wczytuje z pliku i zapisuje tylko 13 pierwszych wierszy

0
 #include "stdafx.h"
#include "fstream"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int Poziom_budynku[500], a, b, c, Liczba_ludnosci[500], Punkty[500];

	fstream plik, obliczenia;
	plik.open("D:\dane.txt", ios::in | ios::out);
	obliczenia.open("D:\obliczenia.txt", ios::out);
	for (int i = 0;; i++){
		if (!plik.good()){ break; }
		plik >> Poziom_budynku[i] >> a >> b >> c >> Liczba_ludnosci[i] >> Punkty[i]; 
		plik.ignore(256, '\n');
		//cout << Poziom_budynku[i] << "    "<< Punkty[i]<< endl;
		obliczenia << Poziom_budynku[i] <<"    "<<  Punkty[i]<<'\n';
	}
	plik.close();
	obliczenia.close();

	system("pause");
	return 0;
}

Co z tym kodem jest nie tak ?

Tak wygląda plik Dane
user image

Wywaliłem warunek if i wstawiłem do pętli for i < 30 (tyle jest wierszy w pliku) to wypisuje do 13 wiersza normalnie, a później całe czas te liczby -858993460 -858993460

0

W wierszu 13 wczytujesz liczbę 1,119 do zmiennej typu int.

0

Nom, też to teraz zauważyłem, ale nie da się tego wczytać do stringu, bo wtedy mam błąd przy operatorze >>

0
  1. Masz w tych danych niezły bajzel ponieważ dla kolumny drugiej która najpierw ciągle rośnie do 910 a potem nagle w wierszu 13 masz 1,119 to by sugerowało że ten przecinek to separator grup trzycyfrowych. Ale jednak nie ponieważ w kolumnie 7 wyraźnie widać że przecinek służy jako separator dziesiętny zaś kropka jako separator grup trzycyfrowych
  2. Wczytaj do wiersz do string'a line zrób odpowiednie podmiany, po czym stwórz istringstream sin(line); i wczytuj z tego sin;

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