Tablica dynamiczna z pliku tekstowego

0

Witajcie, próbowałem zrobić program, który pobiera liczby z pliku tekstowego ( każda liczba jest w nowej linii) a następnie zapisuje je do tablicy jednowymiarowej dynamicznej. Nie mam dużego doświadczenia z programowaniem więc moje błędy mogą być elementarne jednak nie mogę ich znaleźć a program nie działa tak jakbym oczekiwał ponieważ funkcja,któa powinna wpisywać liczby z pliku do tablicy w ogóle się nie wykonuje .

    if (plik.good() == true ) {
        while(!plik.eof()) {
        getline(plik,linia);
        licznik++;
        }
        licznik=licznik-1;
        int * Tablica = new int(licznik);
        licznik=0;
        while(!plik.eof()) {               // ten fragment nie działa
            getline(plik,linia);
            liczba = atoi(linia.c_str());
            Tablica[licznik]= liczba;
            licznik++;
            cout <<liczba<<endl;

        }
        cout<<Tablica[3]<<endl;

    }
    else {
        cout <<"Blad otwarcia pliku" ;
    }
    cout<<licznik-1;
    //cout<<Tablica[1];
    return 0;
}

chciałem sprawdzić program i wyświetlić dowolny element tablicy lecz liczby w tablicy są losowe więc pętla nie zadziałała.

0

Głównym problemem jest nie cofanie wskaźnika plikowego do początku pliku, po odczytaniu danych do końca pliku

plik.clear();
plik.seekg(0);

Natomiast tej konstrukcji

while(!plik.eof())

należy używać z rozwagą. Sprawdzać po każdym odczycie, czy dane prawidłowo się wczytały
i dopiero działać na wczytanych danych. Wystarczy, że plik będzie zakończony znakiem nowej linii
i wyniki działania programu nie będą prawidłowe.

std::vector<int> nums;
if(plik){
   int num;
   while(plik >> num){
      nums.push_back(num);
   }
}

Tablica dynamiczna std::vector

a to wersja uczelniana

ifstream fin("test.txt");
   if (fin) {
      int* pArr = nullptr;
      int size = 0;
      int tmp;
      while (fin >> tmp) {
         ++size;
      }
      fin.clear();
      fin.seekg(0);
      if (size > 0) {
         pArr = new int[size];
         for (int i = 0, num = 0; i < size && fin >> num; ++i) {
            pArr[i] = num;
         }
         for (int i = 0; i < size; ++i) {
            std::cout << pArr[i] << ' ';
         }
      }      
      delete[] pArr;
   }

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