Odczytywanie liczb z pliku po znaku spacja.

0

Witam. Mam do napisania program w którym między innymi mam za zadanie odczytać dane z pliku dane.txt. Tylko że w pierwszym wierszu znajduję się ilość elementów tablicy a w kolejnych następnych liczby które trzeba wpisać do stworzonej tablicy. Plik wygląda mniej więcej tak:

10 // to jest wielkość tablicy
3 42 532 -31 41
12 4 51 21 -4
Liczby są oddzielone znakiem spacja. I teraz moje pytanie brzmi, w jaki sposób mam odczytywać po kolei te liczby i żeby zapisywało mi je do tablicy, tzn tab[0]=3, tab[1]=42, tab[3]=532 itd. (pierwszą linię odczytuję i tworzę tablicę, chodzi mi o kolejne wiersze)

fstream plik("dane.txt", ios::in);
	string tempLiczbaTablicy;
	int LiczbaTablicy;
	if(plik.good()==true)
		{
		getline(plik, tempLiczbaTablicy);
		LiczbaTablicy=atoi(tempLiczbaTablicy.c_str());
		int *tab= new int[LiczbaTablicy]; 
1
int rozmiar;
plik >> rozmiar; // przeczytać tak czy inaczej trzeba, ale ponieważ używam wektora - rozmiar mi niepotrzebny
std::vector<int> liczby(rozmiar); // ale mogę go użyć, żeby zaoszczędzić sobie możliwych realokacji
int n;
while (plik >> n) {
    liczby.push_back(n);
}

Jak to zrobić ze wskaźnikiem i dynamicznie alokowaną tablicą, to chyba wiesz. ;)

0
Azrael_Valedhel napisał(a)
int rozmiar;
plik >> rozmiar; // przeczytać tak czy inaczej trzeba, ale ponieważ używam wektora - rozmiar mi niepotrzebny
std::vector<int> liczby(rozmiar); // ale mogę go użyć, żeby zaoszczędzić sobie możliwych realokacji
int n;
while (plik >> n) {
    liczby.push_back(n);
}

Jak to zrobić ze wskaźnikiem i dynamicznie alokowaną tablicą, to chyba wiesz. ;)

Wszystko OK, ale to zadziała w pliku binarnym, autor pytał o plik tekstowy.
A zapytam dlaczego poniższy kod dwukrotnie wypisuje ostatnoą liczbę w pliku:

#include <fstream>
#include <iostream>
using namespace std;
int main ()
{
  FILE * pFile;
  int a;
  pFile = fopen ("e:\\g3.txt","rb");
  if (pFile==NULL) perror ("Error opening file");
  else
  {
    while (!feof(pFile))
    {
     fscanf(pFile,"%d",&a); 
      cout<<a<<endl;   
      }
    }
    fclose (pFile);     
  cin.sync();
  cin.get();
  return 0;
}

 
0

To zadziała na pliku właśnie tekstowym, kortyg. ;)
A Twój problem to użycie feof() w warunku pętli: http://www.gidnetwork.com/b-58.html

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