Включая conio.h вы меньше Windows
делаете
su=fwrite(v ,sizeof(float) , Datasetsize , f);
...
s=fread(v , sizeof(float), DataSetSize, fp );
вы пишете и читаете двоичный код, под windows для записи и чтения двоичного файла вам необходимо использовать «wb» и «rb», поэтому вам нужно заменить
f=fopen(filename,"w");
...
fp = fopen( filename , "r" );
на
f=fopen(filename,"wb");
...
fp = fopen( filename , "rb" );
но см. Также примечания ниже
из этого:
В createdataset :
вы не проверяете, удалось ли вам открыть файл, вам нужно проверить fp не NULL , например, используя perror
, чтобы указать причину:
if (fp == NULL)
{
perror("cannot open file to write");
exit(-1);
}
Также сделать
*(v+i)=...
is не очень читабельно для установки элементов массива, просто сделайте
v[i] = ...
В loadDataset вы не можете сделать
if( fp==NULL)
printf("File cant be opened");
и продолжить, как там не является ошибкой, вам нужно остановить выполнение функции, выполнив return
или поместив остальные в ветку else
, и снова вы можете использовать perror
для обозначения проблемы:
if (fp == NULL)
{
perror("cannot open the file to read");
exit(-1);
}
Также сделать
printf("\t%f",*(v+i));
не очень читается для доступа к элементу массива, просто сделайте
printf("\t%f", v[i]);
In main :
scanf("%d",&datasetsize);
, если пользователь не вводит допустимый int, поведение не определено после того, как datasetsize не установлен, лучше сделать, например:
if ((scanf("%d",&datasetsize) != 1) || (datasetsize < 1)) {
puts("invalid size);
return -1;
}
Также
char filein[50];
...
scanf("%s",filein);
имеет неопределенное поведение, если пользователь вводит более 49 символов, сделайте
scanf("%49s",filein);
даже лучше проверить scanf
возвращает 1 в случае, если stdin перенаправляется в пустой входной файл