PDA

View Full Version : سوال: مشکلی در مورد کار با فایل ها در C++



soroush68
سه شنبه 18 تیر 1387, 17:15 عصر
:اشتباه: برنامه ی ساده ای رو که در پایین می بینید , نوعی کلاس شامل یک رشته کاراکتر و یک اینتجر است. که برنامه با توابعی متغیر هایی از نوع این کلاس رو دریافت و در فایلی ذخیره میکند و در قسمتی هم محتویات آن را نشان می دهد.
در صورتی که برنامه رو اجرا کنیم و در این فایل بنویسیم و آن را نمایش دهیم مشکلی پیش نمی آید , اما مساله ی من اینجاست که اگر این برنامه رو ببندیم و دوباره اجرا کنیم و بخواهیم محتویات فایل رو ببینیم , فایل مطالب پرت و پلا نمایش می دهد.
خیلی ممنون میشم که راهنمایی کنید.
عکس وسط نمایش فایل بلافاصله بعد از ثبت در فایل. عکس سمت راست نمایش فایل بعد از اجرای مجدد برنامه.

http://lengejoorab.persiangig.ir/c++problem.JPG

#include <iostream>
#include <conio>
#include <fstream>
#include <stdio>
class data
{
int n;
char *st;
public:
data();
void getdata();
void showdata();
};
data::data()
{
st=new char[40];
}
void data::getdata()
{
cout<<"Enter n: ";
cin>>n;
cout<<"Enter string: ";
gets(st);
}
void data::showdata()
{
cout<<"n: "<<n<<endl;
puts(st);
}
void enter();
void view();
void main()
{
char ans;
while(1)
{
clrscr();
cout<<"1)New data\n2)View\n3)Exit";
ans=getch();
switch(ans)
{
case '1': enter(); break;
case '2': view(); break;
case '3':return;
}
}
}
void enter()
{
clrscr();
data d;
ofstream ofile;
ofile.open("Data",ios::binary|ios::app);
d.getdata();
ofile.write((char*) &d,sizeof(data));
ofile.close();
}
void view()
{
clrscr();
data d;
ifstream ifile;
ifile.open("Data",ios::binary);
while(ifile.read((char*) &d,sizeof(data)))
{
d.showdata();
cout<<"\n\n";
}
getch();
}

mic_makarti
سه شنبه 18 تیر 1387, 18:51 عصر
چون توی کلاس اشاره گر داری نباید اینطور ذخیره کنی یعنی الان مثلا آدرس اشاره گر را ذخیره کردی بعد از بستن برنامه محتویات آدرس رزرو شده توسط برنامه از بین میره پس بعد از باز کردن چرت و پرت نشون میده
پس بهتره که برای کلاس یه متد بنویسی که اون کلاس را ذخیره کنه یعنی مثلا داخل اشاره گر را منظورم
رشتهه هست را ذخیره کنه و یک متد هم برای خواندن کلاس که محتویات اشاره گر را جاش بزاره . فکر کنم خیلی بد گفتم !!! (این متد ها عضو کلاسند !!!)

soroush68
چهارشنبه 19 تیر 1387, 00:43 صبح
THANK ALOT MY FRIEND