Ввожу вектор,записываю в файл(записываю как в текстовый(wt)),открываю - а там бред..Не понимаю,почему=(
ВОт код..
fwrite(pvector,sizeof(pvector),1,f);
тогда,я так понимаю надо использовать массив из вещественных чисел и открывать файл с параметром "wb" ?что бы записать весь массив в файл?
Ты объясни чего ты хочешь? Быстро записать массив в файл (но его при этом нельзя будет просматривать текстовым редактором), или сделать так, чтобы файл ДА можно было смотреть редактором?
1ое.
Тогда да, открывай файл как бинарный:
if((f=fopen(path,"wb")) == NULL) ...
...Опять..проблема)
Во-первых, кто тебе сказал, что из файла, открытого по "wb" можно читать? Переоткрой файл на чтение - тогда сможешь...
А во вторых ты не совсем корректно вычисляешь размер массива... Вот так попробуй:
fwrite(pvector,vsize*sizeof(float),1,file);
fclose(file);
file=fopen(path,"rb");
float *b=new float[vsize];
fread(b,vsize*sizeof(float),1,file);
Спасибо,все исправил,разобрался - работает:)Боооольшушие спасибо!:)
Можешь вернуть так:
float *fileread(int msize) {
FILE *file; // Незачем передавать это снаружи, ты же все равно только внутри открываешь и закрываешь файл
...
float *bufm = new float[msize];
fread (bufm,msize*sizeof(float),1,file);
...
return bufm;
}
int main() {
...
float *buffer;
...
buffer = fileread(vsize);
// Проверяем, что получили
cout <<"\n";
for (int i=0;i<vsize;i++) cout << buffer[i] << "\n";
delete [] buffer; // Не забываем удалить, когда массив больше не нужен
...
}
0
... // открываем файл для чтения
fseek(file, 0, SEEK_END);
msize = ftell(file) / sizeof(float);
rewind(file);
... // читаем массив из файла
Компилятор старенький(3.1) ,щас пойду дальше разбираться..
Что-то все меньше понимаю я логику твоего компилятора... Откуда там взялся float ** и зачем его преобразовывать к float? Может у тебя с предварительным описанием что-то не стыкуется? Как прототип fileread описан?
Вот код целиком(извиняюсь за громосткость) :
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
void filesave (float *mptr, int msize);
void work (float *mptr, int msize);
float fileread (int msize);
float inputkeyboard(int msize);
void inputfile (int msize);
void main()
{
cout << "Viberite pynkt menu :\n";
cout << "1 - Vvod s klaviaturi\n";
cout << "2 - Chtenie iz faila\n";
cout << "3 - Vihod\n";
int ch;
cin >> ch;
switch (ch)
{
case 1 :
{
cout << "vvedite razmernost posledovatelnosti:\n";
int msize;
cin >> msize;
inputkeyboard(msize);
}
break;
case 2 :
{
int msize;
float *buffer;
buffer=fileread(msize);//ошибка тут
work (buffer,msize);
}
break;
}
cin.get();
cin.get();
}
void work (float *mptr,int msize)
{
cout << "Posledovatelnost :\n";
for (int i=0;i<msize;i++)
cout << mptr[i] << " ";
cout << "\n";
int j=0;
float *min = new float;
*min=mptr[0];
for (i=0;i<msize;i++)
{
if (*min>mptr[i])
{
*min=mptr[i];
j=i;
}
else;
}
cout << "\nMinimalnoe chislo v posledovatelnosti : " << *min <<" \n";
float *srar = new float;
*srar=0;
for (i=0;i<msize;i++)
{
*srar=*srar+mptr[i];
}
*srar=*srar/ msize;
cout << "\nSrednearifmeticheskoe chislo v posledovatelnosti : " << *srar << "\n";
mptr[j]=*srar;
cout << "Posledovatelnost' posle zameni : \n";
for (i=0;i<msize;i++)
cout << mptr[i] << " ";
cout << "\n";
delete min;
delete srar;
}
float inputkeyboard (int msize)
{
cout << "Vvedite chisla v posledovatelnosti : \n";
float *maptr = new float [msize];
for (int i=0;i<msize;i++)
{
cin >> maptr[i];
cout << "\n";
}
cout << "\n";
work(maptr,msize);
cout << "\n";
cout << "Sohranit v file?(1 - Yes,2 - no)\n";
int cho;
cin >> cho;
if (cho==1)
filesave(maptr,msize);
else
;
delete [] maptr;
return 0;
}
void filesave(float *mptr,int msize)
{
char *path= new char[67];
int result;
FILE *file;
do
{
result=1;
cout << "\nVvedite pyt\n";
cin >> path;
if ((file=fopen(path,"wb"))==NULL)
{
cout <<"\nError!\n";
result=0;
}
}
while (result==0);
fwrite(mptr,msize*sizeof(float),1,file);
delete path;
fclose(file);
}
float fileread(int msize)
{
FILE *file;
char *path= new char[67];
int result;
do
{
result=1;
cout << "\nVvedite pyt\n";
cin >> path;
if ((file=fopen(path,"rb"))==NULL)
{
cout <<"\nError!\n";
result=0;
}
}while (result==0);
fseek(file, 0, SEEK_END);
msize = ftell(file) / sizeof(float);
rewind(file);
float *bufm=new float[msize];
fread (bufm,msize*sizeof(float),1,file);
fclose(file);
cout <<"\n";
delete path;
return bufm;// ошибка тут
}
Ну, а теперь посмотри, что возвращает fileread у тебя, и что - у меня... У тебя возвращается просто float, у меня - float *
исправил,но плохо читает.Т.е циклиться или виснет..может с размером проблемы?
Выводит сначало 3 элемента,а потом выводиться много числе с мантисами..откуда- непонятно.
float *fileread(int msize)у тебя изменение msize не передается в основную программу, и потом при вызове work() в нее передается мусор... Сделай msize ссылкой:
float *fileread(int &msize), тогда то ее значение которое определится в функции fileread станет известно в вызывающей ее main(), и соответственно - в work.