Witam, pisze programik w C, który wczytuje plik tekstowy w którym zapisane są liczby w formie macierzy. Po otwarciu pliku zliczam liczbę kolumn i wierszy w pliku i później alokuję dynamicznie odpowiednią tablicę 1-wymiarową o rozmiarze kolumny*wiersze i wpisuję do niej wczytywane liczby. Założenie jest jeszcze takie, że po każdej wczytanej serii liczb (linii) jest tylko 1 enter.

Problem polega na tym, że niektóre pliki są przetwarzane dobrze, a niektóre źle (jest alokowana albo za duża tablica, albo nie są wczytywane liczby).
Z dołączonych przeze mnie pliku, plik y2.txt jest przetwarzany dobrze, plik liczby.txt, a dla pliku piatka.txt alokowana jest zbyt duża tablica.

http://49939.file4u.pl/download/1791565/liczby_
http://49939.file4u.pl/download/1791566/piatka_
http://49939.file4u.pl/download/1791567/y2_

Wydaje mi się, że problem jest z formatowaniem w pliku, ale nie jestem pewny.

Proszę o pomoc i ewentualną poprawę programu.

Poniżej dołączam kod programu.

#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
int main() {
  
  FILE *file;   //nazwa pliku 
  float *num;   //tablica liczb wczytanych z pliku
  long long int kolumny,wiersze,rozmiar;   //liczba kolumn i wierszy w pliku oraz rozmiar tablicy liczb
  char znak;                               //znak wczytywany z pliku txt
  kolumny = 0;
  wiersze = 0;

  //int j;

  file = fopen("piatka.txt", "r");
//----------------------------------------------
if(file)
{
  printf("Plik otwarto pomyslnie\n");              
  
  //zliczanie kolumn w pliku
          while (znak !='\n')
          {
              znak = getc(file);
 
              if (isspace(znak))
              {
                 kolumny++;
              }
         }
         
       fseek(file,0,SEEK_SET);  //powrot do poczatku pliku

//zliczanie wierszy w pliku
       while(!feof(file))
       {
            znak = getc(file);
            
            if(znak == '\n')
               {
                    wiersze++;
               }               
       }
       
  kolumny = kolumny+1;
  rozmiar = kolumny*wiersze;

  fseek(file,0,SEEK_SET);   //powrot do poczatku pliku

  num = new float[rozmiar];

  //zerowanie tablicy
  for(long long int i=0; i<rozmiar; i++)
  {num[i]=0;}

  //----------------------------------------------

  long long int i=0;

    while(!feof(file)) 
    { 
      fscanf(file, "%f", &num[i]);        //zapisywanie liczb z pliku do tablicy
      i++;
    }

    printf("Number of numbers read: %d\n\n", i);
    printf("The numbers are:\n");

    long long int j;

//wypisywanie elementow z tablicy
    for(j=0 ; j<i ; j++) 
    {      
           printf("%f\n", num[j]);
    }
    
    printf("Rozmiar: %d", rozmiar);
    fclose(file);    //zamkniecie pliku

    delete []num;    //usuniecie tablicy
    getch();
    return 0;
}

else
{
 printf("Blad otwarcia\n");
 fclose(file);   
}
}

</i></cpp>