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