Wpisywanie liczb z pliku do tablicy

0

Mam program który w pierwszej pętli zlicza ile jest liczb w tablicy (licznik), następnie tworzy tablicę oraz wpisuje do niej liczby (liczby są oddzielone w pliku średnikiem). Dlaczego występuje błąd przepełnienia tablicy?

int liczba, licznik = 0;
    FILE* plik = fopen("Out.txt", "r");

    rewind(plik); 

     while (!feof(plik))
         {
          fscanf(plik, "%d;", &liczba);
         if (feof(plik)) break;
         licznik++;

         }

     int* tab = new int[licznik];

     licznik = 0;
     while (!feof(plik))
     {
         fscanf(plik, "%d;", &liczba);
         if (feof(plik)) break;
         tab[licznik] = liczba;
         licznik++;
     }

     fclose(plik);
0

Dlaczego nie użyjesz po prostu std::vector?

U mnie ten kod się nie wysypuje. https://wandbox.org/permlink/ionPk3d80yw7XJaF

1

Jeśli to C++ to rzeczywiście, czemu nie std::vector, ale tak też się da, tylko rewind po pierwszej pętli i liczba = 0; licznik = 0 - dobry zwyczaj: inicjalizować zmienne:)

     FILE* plik = fopen("numbers.txt", "r");

     int liczba = 0, licznik = 0, cnt = 0;

     while (!feof(plik))
         {
            fscanf(plik, "%d;", &liczba);
            if (feof(plik)) break;
            licznik++;
            }
     int* tab = new int[licznik];
     rewind(plik);
     while (!feof(plik))
     {
         fscanf(plik, "%d;", &liczba);
         if (feof(plik)) break;
         tab[cnt] = liczba;
         cnt++;
     }
     printArray(tab, licznik); // -> [1, 2, 3, 4]
     // numbers.txt: 1;2;3;4
     fclose(plik);

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