Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Файлы и функции


Автор: Greeneyes 23.3.2007, 19:36
Халлоу всем, всем, всем... smile 
не могли бы вы мне помочь...у меня тут прям беда...бедище smile ...у меня тут вот что...
Для хранения данных о цветных планшетных сканерах описать структуру вида :
Код

struct scan_info{
char model[25]:       // наименование модели
int price:                // цена
double x_s1ze:        // горизонтальный размер области сканирования
double y_s1ze;        // вертикальный размер области сканирования
int optr:             // оптическое разрешение
int grey;             // число градаций серого
};

Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными в режиме диалога, и записывает массив в бинарный файл. Структура файла: в первых двух байтах размещается значение типа int, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах.
Написать функцию, которая запрашивает данные о сканере в режиме диалога и замещает записи в бинарном файле по заданному номеру. Обязательный параметр — номер замещаемой записи. Функция должна возвращать нулевое значение, если запись прошла успешно, и -1 в противном случае.
Привести пример программы, создающей файл с данными о сканерах (данные вводятся с клавиатуры) из не менее восьми записей и осуществляющий вставку новых данных о сканере.
Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
и я не знаю как это делать smile ....может у кого-нибуть, что-нибудь подобное в жизни случалось...помогите, а? smile 

Автор: GIK 28.3.2007, 22:59
Вот, написал кое что smile
Можешь переделать под свои нужды, пока програмка позволяет вводить данные в файл и заменять данные в файле на новые указывая эллемент.

Код

#include<stdio>
#include<conio>
#include<cstdio>
#include<string>
#include<stdlib>
#include<iostream>
#include<fstream>

using namespace std;

struct scan_info{
 char model[25];    //
 int price;         //
 int x_s1ze;        //
 int y_s1ze;        //
 int optr;          //
 int grey;          //
};

void replacement(scan_info *sc_inf[], int del, int for_point, int for_size, ostream &out, int n);

void replacement(scan_info *sc_inf[], int ind, int for_point, int for_size, ostream &out, int n){


  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[ind]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[ind]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[ind]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[ind]->grey;

  out.seekp(for_point);

  out<<sc_inf[ind]->model;
  out<<sc_inf[ind]->price;
  out<<sc_inf[ind]->x_s1ze;
  out<<sc_inf[ind]->y_s1ze;
  out<<sc_inf[ind]->optr;
  out<<sc_inf[ind]->grey;

  for(int i=ind+1; i<n; i++){
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
};
 void del_ellement(scan_info *sc_inf[], int del, int for_point, ostream &out, int n){

   out.seekp(for_point);
   for(int i=(del+1); i<n; i++){
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
 }

void main()
{
 scan_info *sc_inf[3];
 int i, j, n=3, del;

 for(i=0; i<n; i++) {
 sc_inf[i]=(scan_info *) malloc(sizeof(scan_info));
 }



  int collector=0; /*Ñîáèðàòåëü*/


 for(i=0; i<n; i++){
  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[i]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[i]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[i]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[i]->grey;


 }

 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 if(!out){
  cout<<"Not File"<<endl;
  getch();
  return;
 }


 int for_point[3];
 int for_size[3];

 int pr=2;
 out.seekp(pr);

 for(i=0; i<n; i++){
 out<<sc_inf[i]->model;
 out<<sc_inf[i]->price;
 out<<sc_inf[i]->x_s1ze;
 out<<sc_inf[i]->y_s1ze;
 out<<sc_inf[i]->optr;
 out<<sc_inf[i]->grey;

 collector=0;
 int ran=sc_inf[i]->price;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->x_s1ze;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->y_s1ze;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->optr;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->grey;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }

 for_point[i]=pr;
 for_size[i] =strlen(sc_inf[i]->model)+collector;
 pr+=strlen(sc_inf[i]->model)+collector;

}


 int zam; int bb=1;
 cout<<"Vvedite ellement na zameni:";
 cin>>zam;
 if(zam>n || zam<0){
  bb=0;
  cout<<"No correct"<<endl;
 }
 zam--;
 if(bb){
  replacement(sc_inf, zam, for_point[zam], for_size[zam], out, n);
 }

 out.close();

getch();

}

Автор: shokky 29.3.2007, 19:43
а у меня такая же задача....и я не знаю как её делать...а Greeneyes что то тему не стал развивать...

GIK, спасибо, ...да что там просто СПАСИБИЩЕ тебе за помощь....

вот только не знаю....может у Greeneyes все заработало....а у меня выдало сначало 12 ошибок...потом после подстановки h в конце подключения всех модулей стало выдавать 2 ошибки и 1 ворнинг...

GIK...можно тебя попросить посмотреть ошибки...и если не трудно чуток закоментировать код...

очень надеюсь на твою помощь....заранее тебе БОООЛЬШОЕ пасиба smile 

Код

#include<stdio.h>
#include<conio.h>  
#include<cstdio.h>  //мне тут пишет unable to open include file...посиму?
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>

using namespace std;  //мне тут пишет declaration error...посиму?

struct scan_info{
 char model[25];    //
 int price;         //
 int x_s1ze;        //
 int y_s1ze;        //
 int optr;          //
 int grey;          //
};

void replacement(scan_info *sc_inf[], int del, int for_point, int for_size, ostream &out, int n);  //почему сразу две функции объявляются и что они делают?

void replacement(scan_info *sc_inf[], int ind, int for_point, int for_size, ostream &out, int n){


  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[ind]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[ind]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[ind]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[ind]->grey;

  out.seekp(for_point);

  out<<sc_inf[ind]->model;   //это специальная функция вывода такая?
  out<<sc_inf[ind]->price;
  out<<sc_inf[ind]->x_s1ze;
  out<<sc_inf[ind]->y_s1ze;
  out<<sc_inf[ind]->optr;
  out<<sc_inf[ind]->grey;

  for(int i=ind+1; i<n; i++){    //что делает цикл?
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
};
 void del_ellement(scan_info *sc_inf[], int del, int for_point, ostream &out, int n){

   out.seekp(for_point);
   for(int i=(del+1); i<n; i++){    //что делает цикл?
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
 }

void main()
{
 scan_info *sc_inf[3];
 int i, j, n=3, del;

 for(i=0; i<n; i++) {          // что делает цикл и что такое malloc?
 sc_inf[i]=(scan_info *) malloc(sizeof(scan_info));
 }



  int collector=0; /*Ñîáèðàòåëü*/


 for(i=0; i<n; i++){           //что делает цикл?
  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[i]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[i]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[i]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[i]->grey;


 }

 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 if(!out){
  cout<<"Not File"<<endl;
  getch();
  return;
 }


 int for_point[3];
 int for_size[3];

 int pr=2;
 out.seekp(pr);

 for(i=0; i<n; i++){
 out<<sc_inf[i]->model;
 out<<sc_inf[i]->price;
 out<<sc_inf[i]->x_s1ze;
 out<<sc_inf[i]->y_s1ze;
 out<<sc_inf[i]->optr;
 out<<sc_inf[i]->grey;

 collector=0;
 int ran=sc_inf[i]->price;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->x_s1ze;      //а что значит вот такая запись -> ?
 while(ran!=0){    //что делает цикл?
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->y_s1ze;
 while(ran!=0){      //зачем 4 раза одно и тоже?
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->optr;
 while(ran!=0){        
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->grey;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }

 for_point[i]=pr;          //что делает цикл?
 for_size[i] =strlen(sc_inf[i]->model)+collector;     //мне тут пишет parametr for_size is never used...
 pr+=strlen(sc_inf[i]->model)+collector;

}


 int zam; int bb=1;
 cout<<"Vvedite ellement na zameni:";
 cin>>zam;
 if(zam>n || zam<0){
  bb=0;
  cout<<"No correct"<<endl;
 }
 zam--;
 if(bb){
  replacement(sc_inf, zam, for_point[zam], for_size[zam], out, n);
 }

 out.close();

getch();

} 


очень извиняюся за убийственное кол-во вопросов... smile 

Автор: GIK 29.3.2007, 21:58
Да без проблем smile

Код

#include<stdio.h>
#include<conio.h>  
#include<cstdio.h>  //мне тут пишет unable to open include file...посиму?
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>

using namespace std;  //мне тут пишет declaration error...посиму?
/*
Какой компилер? Возможно не все библиотеки подключил
*/


struct scan_info{
 char model[25];    //
 int price;         //
 int x_s1ze;        //
 int y_s1ze;        //
 int optr;          //
 int grey;          //
};

void replacement(scan_info *sc_inf[], int del, int for_point, int for_size, ostream &out, int n);  //почему сразу две функции объявляются и что они делают?
/*
 Первое это объявление, второе определение
*/
void replacement(scan_info *sc_inf[], int ind, int for_point, int for_size, ostream &out, int n){


  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[ind]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[ind]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[ind]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[ind]->grey;

  out.seekp(for_point);

  out<<sc_inf[ind]->model;   //это специальная функция вывода такая?
 /*
  out - это поток, его передали в эту функцию по ссылке.
 определили поток в main() так:
 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 << -оператор вывода, выводит данные из  sc_inf[ind]->model
 

 */
  out<<sc_inf[ind]->price;
  out<<sc_inf[ind]->x_s1ze;
  out<<sc_inf[ind]->y_s1ze;
  out<<sc_inf[ind]->optr;
  out<<sc_inf[ind]->grey;

  for(int i=ind+1; i<n; i++){    //что делает цикл?
  /*По логике дописываем оставшиеся данные из после заменяемого
 */
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
};
 void del_ellement(scan_info *sc_inf[], int del, int for_point, ostream &out, int n){

   out.seekp(for_point);
   for(int i=(del+1); i<n; i++){    //что делает цикл?
  /*
  Тупо дописывает эллементы после удаляемого по индекчу del
  out.seekp(for_point) установит позицию где начинается удаляемый эллемент
 for_point=for_point[zam] - передали значение которое фиксировали в массив for_point,
  когда определяли размеры и позиции.
 */
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
 }

void main()
{
 scan_info *sc_inf[3];
 int i, j, n=3, del;

 for(i=0; i<n; i++) {          // что делает цикл и что такое malloc?
 /*
  Распределяем память для объектов - структур
*/
 sc_inf[i]=(scan_info *) malloc(sizeof(scan_info));
 }



  int collector=0; /*Ñîáèðàòåëü*/


 for(i=0; i<n; i++){           //что делает цикл?
 /*
  Вводим данные в структуру, потом из структуры будем вводить в файл
 */
  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[i]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[i]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[i]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[i]->grey;


 }

 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 if(!out){
  cout<<"Not File"<<endl;
  getch();
  return;
 }


 int for_point[3];
 int for_size[3];

 int pr=2;
 out.seekp(pr);

 for(i=0; i<n; i++){
 out<<sc_inf[i]->model;
 out<<sc_inf[i]->price;
 out<<sc_inf[i]->x_s1ze;
 out<<sc_inf[i]->y_s1ze;
 out<<sc_inf[i]->optr;
 out<<sc_inf[i]->grey;

 collector=0;
 int ran=sc_inf[i]->price;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->x_s1ze;      //а что значит вот такая запись -> ?
 /*
  Так используется обращение к данным через указатель на объект, например
 чтобы взять данные на которые указывает обычный указатель на типа int, нужно писать так:
 int r = 123;
 int *rr=&r;
 int r2= *rr; //передали значение на которе указывает указатель rr
 а через указатель на объект обращаются так: ->
 
 */
 while(ran!=0){    //что делает цикл?
 /*
  Определяет "длину" числа, т.е. из скольки символов состоит 
 деление на десять, "сокращает" число на один символ, например
 123 / 10 = 12 , интовые переменные округлят чило
 12 / 10 = 1 
 1 / 10 =0 
 В итоге вычислили что число сотоит из 3 знаков
 */
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->y_s1ze;
 while(ran!=0){      //зачем 4 раза одно и тоже?
 /*Не 4 , а пять :)
 пять целочислительных переменных используются для данных о товаре
 переменная,  collector вычислет длину всех чисел, для того чтобы определить позиции данных 
 записываемых в файл, о товаре.
 pr+=strlen(sc_inf[i]->model)+collector; 
 pr - позиция каждого эллемента в файле
 strlen(sc_inf[i]->model) - длина имени товара
 collector -  сколько чисел насобирали  :)
 в итоге получается длина из символов, ее нужно учесть чтобы использовать в других действиях, 
 например удаление или перемещение данных в файле

 */
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->optr;
 while(ran!=0){        
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->grey;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }

 for_point[i]=pr;          //что делает цикл?
/*
 Это не цикл, а имя массива for_point, тебя что for в имени смутил ;)
 
 */
 for_size[i] =strlen(sc_inf[i]->model)+collector;     //мне тут пишет parametr for_size is never used...
 pr+=strlen(sc_inf[i]->model)+collector;

}


 int zam; int bb=1;
 cout<<"Vvedite ellement na zameni:";
 cin>>zam;
 if(zam>n || zam<0){
  bb=0;
  cout<<"No correct"<<endl;
 }
 zam--;
 if(bb){
  replacement(sc_inf, zam, for_point[zam], for_size[zam], out, n);
 }

 out.close();

getch();

}  

Вроде корректно, но советую почитать книгу по C++, а потом уже думать о алгоритмах, хотя....
если нравится думать сейчас, то думай smile Вдруг идеи новые возникнут smile

Автор: Xenon 30.3.2007, 00:25
Осипипеный вариант smile
Код

#include <iostream>
#include <string>
#include <fstream>

struct scan_info
{
    char model[25];       // наименование модели
    int price;            // цена
    double x_size;        // горизонтальный размер области сканирования
    double y_size;        // вертикальный размер области сканирования
    int optr;             // оптическое разрешение
    int grey;             // число градаций серого
};

int add(scan_info* scan_arr, int count)
{
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        std::cout << "Enter model: ";
        std::cin >> scan_arr[i].model;
        std::cout << "Enter price: ";
        std::cin >> scan_arr[i].price;
        std::cout << "Enter x size: ";
        std::cin >> scan_arr[i].x_size;
        std::cout << "Enter y size: ";
        std::cin >> scan_arr[i].y_size;
        std::cout << "Enter optical resolution: ";
        std::cin >> scan_arr[i].optr;
        std::cout << "Enter the number of shade of gray: ";
        std::cin  >> scan_arr[i].grey;
    }
    std::string path;
    std::cout << "Enter path to file: ";
    std::cin >> path;
    std::fstream file(path.c_str(),std::ios::out | std::ios::binary);
    if (!file)
    {
        return -1;
    }
    file.write(reinterpret_cast<char*>(&count),sizeof(int));
    for (int i = 0; i < count; ++i)
    {
        file.write(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
    }
    file.close();
    return 0;
}

int replace(const std::string& path, int position)
{
    std::fstream file(path.c_str(),std::ios::in | std::ios::out | std::ios::binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    if (position < 0 || position > count)
    {
        return -1;
    }
    scan_info scaner;
    std::cout << "Enter model: ";
    std::cin >> scaner.model;
    std::cout << "Enter price: ";
    std::cin >> scaner.price;
    std::cout << "Enter x size: ";
    std::cin >> scaner.x_size;
    std::cout << "Enter y size: ";
    std::cin >> scaner.y_size;
    std::cout << "Enter optical resolution: ";
    std::cin >> scaner.optr;
    std::cout << "Enter the number of shade of gray: ";
    std::cin  >> scaner.grey;
    file.clear();
    file.seekg(sizeof(int)+sizeof(scan_info)*position,std::ios::beg);
    file.write(reinterpret_cast<char*>(&scaner),sizeof(scan_info));
    file.close();
    return 0;
}

int read(const std::string& path, scan_info* scan_arr)
{
    std::fstream file(path.c_str(),std::ios::in | std::ios::binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        std::cout << i << std::endl;
        file.read(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
        std::cout << "Enter model: " << scan_arr[i].model << std::endl;
        std::cout << "Enter price: " << scan_arr[i].price << std::endl;
        std::cout << "Enter x size: " << scan_arr[i].x_size << std::endl;
        std::cout << "Enter y size: " << scan_arr[i].y_size << std::endl;
        std::cout << "Enter optical resolution: " << scan_arr[i].optr << std::endl;
        std::cout << "Enter the number of shade of gray: " << scan_arr[i].grey << std::endl;
    }
    file.close();
    return 0;
}
int main(int argc, char* argv[])
{
    scan_info* pTr = NULL;
    std::string path;
    int count = 0;
    int position = 0;
    std::cout << "Enter number of scaners: ";
    std::cin >> count;
    add(pTr,count);
    std::cout << "Enter path to file: ";
    std::cin >> path;
    std::cout << "Enter the position of the detachable field: ";
    std::cin >> position;
    replace(path,position);
    delete [] pTr;
    read(path,pTr);
    delete [] pTr;
    _flushall(); 
    getchar();
    return 0;
}


Автор: shokky 30.3.2007, 07:08
Xenon,  smile  спасибки...но у меня при запуске выдается 25 ошибок smile .....в каждой строчке типа как 20.... smile  


GIK, ОООгромнейшее тебе спасиба ... smile  smile  smile ...
а мона еще спросить....обязательно надо создавать файл именно в этом месте "C://test/test2.txt"...и как там что надо писать....если не сложно приведи примерчик пожалуйста.... smile 

Автор: apook 30.3.2007, 09:12
GIK
Цитата

Структура файла: в первых двух байтах размещается значение типа int, определяющее количество
сделанных в файл записей; далее без пропусков размещаются записи о сканерах.

Соблюсти надо наверно было smile

и интересно ты организовал выделение памяти указателей на массивы структур, конечно ничто не мешает массиву состоять из одного элемента но все-же 

Автор: Xenon 30.3.2007, 12:32
shokky, какой компилятор? Borland 3.1?

Добавлено @ 12:38
Код

#include <iostream.h>
#include <string.h>
#include <fstream.h>

struct scan_info
{
    char model[25];       // наименование модели
    int price;            // цена
    double x_size;        // горизонтальный размер области сканирования
    double y_size;        // вертикальный размер области сканирования
    int optr;             // оптическое разрешение
    int grey;             // число градаций серого
};

int add(scan_info* scan_arr, int count)
{
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        cout << "Enter model: ";
        cin >> scan_arr[i].model;
        cout << "Enter price: ";
        cin >> scan_arr[i].price;
        cout << "Enter x size: ";
        cin >> scan_arr[i].x_size;
        cout << "Enter y size: ";
        cin >> scan_arr[i].y_size;
        cout << "Enter optical resolution: ";
        cin >> scan_arr[i].optr;
        cout << "Enter the number of shade of gray: ";
        cin  >> scan_arr[i].grey;
    }
    string path;
    cout << "Enter path to file: ";
    cin >> path;
    fstream file(path.c_str(), out | binary);
    if (!file)
    {
        return -1;
    }
    file.write(reinterpret_cast<char*>(&count),sizeof(int));
    for (int i = 0; i < count; ++i)
    {
        file.write(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
    }
    file.close();
    return 0;
}

int replace(const string& path, int position)
{
    fstream file(path.c_str(),in | out | binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    if (position < 0 || position > count)
    {
        return -1;
    }
    scan_info scaner;
    cout << "Enter model: ";
    cin >> scaner.model;
    cout << "Enter price: ";
    cin >> scaner.price;
    cout << "Enter x size: ";
    cin >> scaner.x_size;
    cout << "Enter y size: ";
    cin >> scaner.y_size;
    cout << "Enter optical resolution: ";
    cin >> scaner.optr;
    cout << "Enter the number of shade of gray: ";
    cin  >> scaner.grey;
    file.clear();
    file.seekg(sizeof(int)+sizeof(scan_info)*position,std::ios::beg);
    file.write(reinterpret_cast<char*>(&scaner),sizeof(scan_info));
    file.close();
    return 0;
}

int read(const string& path, scan_info* scan_arr)
{
    fstream file(path.c_str(), in | binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        cout << i << endl;
        file.read(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
        cout << "Enter model: " << scan_arr[i].model << endl;
        cout << "Enter price: " << scan_arr[i].price << endl;
        cout << "Enter x size: " << scan_arr[i].x_size << endl;
        cout << "Enter y size: " << scan_arr[i].y_size << endl;
        cout << "Enter optical resolution: " << scan_arr[i].optr << endl;
        cout << "Enter the number of shade of gray: " << scan_arr[i].grey << endl;
    }
    file.close();
    return 0;
}
int main(int argc, char* argv[])
{
    scan_info* pTr = NULL;
    string path;
    int count = 0;
    int position = 0;
    cout << "Enter number of scaners: ";
    cin >> count;
    add(pTr,count);
    cout << "Enter path to file: ";
    cin >> path;
    cout << "Enter the position of the detachable field: ";
    cin >> position;
    replace(path,position);
    delete [] pTr;
    read(path,pTr);
    delete [] pTr;
    _flushall(); 
    getchar();
    return 0;

}


тогда как-то так

Автор: shokky 30.3.2007, 19:44
Xenon, а я не знаю smile ...это где надо посмотреть?....у меня такой компилятор который стоит в универе...то есть на котором надо сдавать...и который в твоей последней версии решения выдает 9 ошибок в строчках 36, 41, 42, 44, 50... smile 
поможешь исправить? smile 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)