PDA

View Full Version : سوال: فایل های دودویی خواندن و نوشتن



rezaheidarida
چهارشنبه 25 خرداد 1390, 01:28 صبح
سلام...
چند تا مشکلی دارم!
برنامه زیر را بببنید!
1- چرا با اینکه ما پنج تا struct name وارد می کنیم و در فایل ذخیره می کنیم
شمارشگر i می گه شش تا struct name در فایل موجود هست؟
2- چرا وقتی می خواییم تمامی struct name های موجود در فایل را چاپ کنیم
اخری دوبار تکرار میشه؟

#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;

struct name{
char A[10] , B[10];
};

int main() {

FILE *io;
name po;

int i=0;

io = fopen ("112.dat" ,"w+b");
for (int j=0 ; j<5 ; j++){
cout<<"First name : ";
gets (po.A);
cout<<endl;
cout<<"last name : ";
gets (po.B);
cout<<endl;
fwrite(&po, sizeof(name ),1,io) ;
}
fclose (io);

io = fopen ("112.dat" ,"rb");
while (!feof(io)){
fread(&po, sizeof(name ),1,io) ;
i++;
}
cout<<i<<endl;
fclose (io);
io = fopen ("112.dat" ,"rb");
while (!feof(io)){
fread(&po, sizeof(name ),1,io) ;
cout<<po.A<<endl;
cout<<po.B<<endl;
}
fclose (io);
getch();
return 0 ;
}

quiet_programmer
چهارشنبه 25 خرداد 1390, 11:16 صبح
با سلام.

کد رو به شکل زیر تغییر بده. وقت نیست دیگه توضیح نمیدم و امیدوارم خودت متوجه شده باشی. ولی اگه باز خواستی بگو تا بعدا توضیح بدم.

#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;

struct name{
char A[10] , B[10];
};

int main()
{
FILE *io;
name po;
int i=0;

io = fopen ("112.dat" ,"w+b");
for (int j=0 ; j<5 ; j++)
{
cout<<"First name : ";
gets (po.A);
cout<<endl;
cout<<"last name : ";
gets (po.B);
cout<<endl;
fwrite(&po, sizeof(name ),1,io) ;
}
fclose (io);

io = fopen ("112.dat" ,"rb");
while (fread(&po, sizeof(name ),1,io))
{
i++;
}
cout<<i<<endl;
fclose (io);
io = fopen ("112.dat" ,"rb");
while (fread(&po, sizeof(name),1,io))
{
cout<<po.A<<endl;
cout<<po.B<<endl;
}
fclose (io);
getch();
return 0 ;
}

rezaheidarida
چهارشنبه 25 خرداد 1390, 16:17 عصر
مرسی عزیزم
اره گرفتم چی شد:تشویق: