#include <stdio.h>
#include <conio.h>
int main()
{
FILE *fin;
float x, maxf=-65355, minf=65356, first,last;
int i=0,max=0,min=0;
fin=fopen("text.txt","r+b");
if (fin==NULL)
{
printf("Cannot open or create file");
getch(); return 0;
}
fscanf(fin, "%f", &first);
fseek(fin,0L,SEEK_SET);
printf ("BEFORE:\n");
while (fread (&x,sizeof(float),1,fin))
{ if (x>maxf) maxf=x;
if (x<minf) minf=x;
printf("%f ",x);
}
fseek(fin,0L,SEEK_SET);
while (fread (&x,sizeof(float),1,fin))
{ i++;
if (x==maxf) max=i;
if (x==minf) min=i;
}
/*------------------------------------------------------------------*/
//Читаем 1й и посл. элементы
fseek(fin,0L,SEEK_SET);
fread(&first,1,4,fin);
fseek(fin,0L,SEEK_SET);
fread(&last,i,4,fin);
//Вместо 1го записываем миним., вместо посл. - макс
fseek(fin,0L,SEEK_SET);
fwrite(&minf,1,4,fin);
fseek(fin,0L,SEEK_SET);
fwrite(&maxf,i,4,fin);
//Вместо мин. запис. первый, вместо макс. - записываем посл
fseek(fin,0L,SEEK_SET);
fwrite(&first,min,4,fin);
fseek(fin,0L,SEEK_SET);
fwrite(&last,max,4,fin);
fclose(fin);
getch(); return 0;
}
[Язык С] Работа с bin файлами. Чтение удалось... а запись
Такая задача:
Компоненты типизированного файла – вещественные числа. Поменять местами первый компонент файла с минимальным, а последний – с максимальным.
Исходный bin файл: http://cpp.do0om.by.ru/bin-pr/text.txt
В нём хранятся: 3.1 4.3 5.4 1.5 2.1
Вот то, что я написал:
Код:
К огромному моему сожалению программа работает неверно. На мой сугубо непрофессиональный взгляд, ошибка кроется за горизонт. чертой в коде.
PS: Хотел бы также спросить, где можно достать нормальный конвертер из txt в bin и наоборот, чтоб с выбором типа мона было и т.п.
Заранее благодарю.
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream in("text12.txt",ios::binary);
if(!in)
cerr<<"Unable to open text.txt for reading"<<endl;
float text;
vector<float> vec;
while(in){
in.read((char*)&text,sizeof(float));
vec.push_back(text);
}
cout<<"The task isn't done"<<endl;
for(int i = 0;i<vec.size();++i)
cout<<vec<<" ";
vector<float>::iterator it=std::min_element(vec.begin(),vec.end());
cout<<endl;
swap(vec[0],*it);
vector<float>::iterator iter = std::max_element(vec.begin(),vec.end());
swap(vec[vec.size()-1],*iter);
cout<<"The Task - is done"<<endl;
for(int i = 0;i<vec.size();++i)
cout<<vec<<" ";
cout<<endl;
ofstream out("text1.txt",ios::binary);
if(!out)
cerr<<"Unable to open text1.txt for writing.\n";
for(int i = 0;i<vec.size();++i)
out<<vec<<'\n';
cout<<"Writing File!"<<endl;
return 0;
}
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream in("text12.txt",ios::binary);
if(!in)
cerr<<"Unable to open text.txt for reading"<<endl;
float text;
vector<float> vec;
while(in){
in.read((char*)&text,sizeof(float));
vec.push_back(text);
}
cout<<"The task isn't done"<<endl;
for(int i = 0;i<vec.size();++i)
cout<<vec<<" ";
vector<float>::iterator it=std::min_element(vec.begin(),vec.end());
cout<<endl;
swap(vec[0],*it);
vector<float>::iterator iter = std::max_element(vec.begin(),vec.end());
swap(vec[vec.size()-1],*iter);
cout<<"The Task - is done"<<endl;
for(int i = 0;i<vec.size();++i)
cout<<vec<<" ";
cout<<endl;
ofstream out("text1.txt",ios::binary);
if(!out)
cerr<<"Unable to open text1.txt for writing.\n";
for(int i = 0;i<vec.size();++i)
out<<vec<<'\n';
cout<<"Writing File!"<<endl;
return 0;
}
Уйуйуй... спасибо конечно. Но задачу уже решил.
ЗЫ репутацию добавлю, когда у меня право на это будет, если к тому времени не забуду :)
c STL:)
По идее можно тему закрыть [ещё и извенюсь].