Новичок
Джуниор
Регистрация: 19.06.2012
Сообщений: 1
|
Запись в файл С++
- Здравствуйте я студент 1 курса, учусь на программиста при написании программы столкнулся с проблемой записи элементов двусвзяного списка в файл. Проблема возникла в связи с тем что я не до конца понимаю каким образом передать значения полученные пользователем и положенными в структуру в файл. Я догадываюсь что проблема связана с указателями т.к. "иероглифы" он записывает а вот считать не может, скорее всего указывает не на тот объект. Нужна помощь только с файлами, если вы видите что программа и написано не слишком красиво - пожалст не ругайте) я сам писал, мне нравиться так, если и криво) вырезал кусочки программы чтобы влезло на форум - не обращайте внимания если есть пустоты
писал в VB 2010
Код:
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
#include <string>
#include <windows.h>
#include <fstream>
using namespace std;
struct SP
{
string tip;
string sp;
string name;
string fio;
string dop;
string dopolnenie;
string god;
string koll;
string Shtrikh;
string system1;
string system2;
string system3;
string system4;
SP* next;
SP* prev;
};
class elementspiska
{
private:
SP* top;
SP* nachalo;
public:
elementspiska()
{nachalo=NULL, top=NULL;}
void dobav(string d, string n, string f, string t, string g, string K, string sh, string dop,string w1,string
w2,string w3,string w4);
void vivod();
void File();
void File2();
void ProVivod();
};
void elementspiska::dobav(string d, string n, string f, string t, string g, string K, string sh, string dop,
string w1,string w2,string w3,string w4)
{
SP* newSP = new SP;
newSP->sp=d;
newSP->name=n;
newSP->fio=f;
newSP->tip=t;
newSP->dopolnenie=dop;
newSP->god=g;
newSP->koll=K;
newSP->Shtrikh=sh;
newSP->system1=w1;
newSP->system2=w1;
newSP->system3=w1;
newSP->system4=w1;
newSP->next = NULL;
if(nachalo!=NULL)
{
top->next=newSP;
top = newSP;
}
else
{
nachalo=top=newSP;
}
}
void elementspiska::vivod()
{
SP* display = nachalo;
while(display)
{
cout<<"Тип: "<<display->tip<<endl;
cout<<"Название: "<<display->sp<<endl;
cout<<"Версия: "<<display->name<<endl;
cout<<endl;
display=display->next;
}
}
void elementspiska::File()
{
elementspiska el;
string d,n,f,t,g,K,sh,dop,w1,w2,w3,w4;
el.dobav(d,n,f,t,g,K,sh,dop,w1,w2,w3,w4);
ofstream outfile("Fdata.txt", ios::binary/*ios::app|ios::out*/);
outfile.write(reinterpret_cast<char*>(&el),sizeof(el));
outfile.close();
cout<<"Файл записан";
}
void elementspiska::File2()
{elementspiska el;
ifstream infile("Fdata.txt",ios::binary/* ios::in|ios::ate*/);
infile.read(reinterpret_cast<char*>(&el),sizeof(el));
el.vivod();
}
string d,n,f,t,g,K,sh,dop,w1,w2,w3,w4;
int vb,svb,rvb,gvb,hvb,i;
bool flag, flags;
int _tmain(int argc, _TCHAR* argv[])
{
elementspiska el;
SetConsoleCP(1251);//Для ввода русских букв
SetConsoleOutputCP(1251);//Для вывода русских букв
do
{
flag=0;
cout<<endl;
cout<<"Выберите действие: "<<endl;
cout<<"Ввод новой игры 1: "<<endl;
cout<<"Вывести данные 2: "<<endl;
cout<<"Удаление последовательно 4: "<<endl;
cout<<"Выход из программы 7: "<<endl;
cout<<"Справка 8: "<<endl;
cout<<"Запись в файл 9: "<<endl;
cout<<"Считать из файла 10: "<<endl;
cin>>vb;
switch(vb)
{
case 1:
cout<<endl;
cout<<"Выберете тип игры "<<endl;
cout<<"RPG 1:"<<endl;
cout<<"RTS 2:"<<endl;
cout<<"FPS 3:"<<endl;
cout<<"TPS 4:"<<endl;
cout<<"MMORPG 5:"<<endl;
cout<<"Вернуться 6:"<<endl;
cin>>svb;
if (svb==6)
break;
if (svb==1)
t="RPG";
if (svb==2)
t="RTS";
if (svb==3)
t="FPS";
if (svb==4)
t="TPS";
if (svb==5)
t="MMROGS";
cout<<endl;
cout<<"тип "<<t<<endl;
cout<<"Название: ";cin>>d;
cout<<"Версия: ";cin>>n;
cout<<"Язык: ";cin>>f;
cout<<endl;
cout<<"возрастное ограничение "<<endl;
cout<<"от 3 до 6"<<endl;
cout<<"от 6 до 10"<<endl;
cout<<"от 10 до 13"<<endl;
cout<<"от 13 до 17"<<endl;
cout<<"с 18 "<<endl;
cout<<"Вернуться"<<endl;
cin>>rvb;
if (rvb==6)
break;
if (rvb==1)
dop="от 3 до 6";
if (rvb==2)
dop="от 6 до 10";
if (rvb==3)
dop="от 10 до 13";
if (rvb==4)
dop="от 13 до 17";
if (rvb==5)
dop="с 18 ";
cout<<"Раздел дополнительных данных"<<t<<endl;
cout<<"игра по сети 1 -да/2-нет";
cin>>gvb;
if (gvb==3)
break;
if (gvb==1)
g="Присутствует";
if (gvb==2)
g="Отсутствует";
cout<<"Изготовитель: ";cin>>K;
cout<<" Минимальные системные требования для "<<d<<endl;
cout<<"OS: ";cin>>w1;
cout<<"Процессор: ";cin>>w2;
cout<<"Память: ";cin>>w3;
cout<<"Видеокарта: ";cin>>w4;
cout<<"Наличе лицензионной этикетки 1 -да/2-нет:(3 - назад) ";
cin>>hvb;
if (hvb==3)
break;
if (hvb==1)
sh=" Присутствует";
if (hvb==2)
sh=" Отсутствует";
el.dobav(d,n,f,t,g,K,sh,dop,w1,w2,w3,w4);
flags=1;
break;
case 2:
el.vivod();
break;
case 7:
flag=1;
exit;
break;
case 9:
el.File();
break;
case 10:
el.File2();
break;
default:
cout<<"Непредусмотренный символ"<<endl;
break;
}
}
while(flag!=1);
return 0;
}
|