PDA

View Full Version : کار با فایلها!



animgr
جمعه 29 تیر 1386, 20:02 عصر
با سلام و خسته نباشید!
خوشحال می شوم به من کمک بکنید...من در حال نوشتن یک برنامه برای فاینالم هستم برای درس ذخیره که با ذخیره و بازیابی به شیوه مستقیم می باشد. من تابع ورود insert را نوشتم ولی باید در یک مکان تکراری نرود...وقتی debug را هم چک می کنم حلقه while درست نمی باشد! برنامه را می گذارم ا


گر توانستید اشکالم را بگویید!



#define Maxsize 20
#define Bucsize 2
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

typedef struct{
char stat;
int en;
}A;
int Hash(A);
void Insert(A);


void main(){
FILE *fp;
A a;
fp=fopen("file.dat","w");

// for(int i=0;i<6;i++){


// printf("write th value: ");
// scanf("%d",&a.en);
a.en=5;
Insert(a);


a.en=15;
Insert(a);
a.en=55;
Insert(a);
}
int Hash(A a){

return a.en=a.en%(Maxsize/Bucsize)+1;
}


void Insert(A a){
A a2={0},a3={0};
int i,j;
int tmp;


FILE *fp;
int t=0,b2=0,k2=0;
int k=Hash(a);
fp=fopen("file.dat","r+");

fseek(fp,(long)Bucsize*sizeof(A)*(k-1),SEEK_SET);

printf("ftel1:%d\n",ftell(fp));
printf("adrese avaliye=%d\n",ftell(fp));
fscanf(fp,"%c",&a.stat);
printf("avalin rec:%c %d\n",a.stat, a.en);

fseek(fp,(long)Bucsize*sizeof(A)*(k-1),SEEK_SET);
printf("ftel1:%d\n",ftell(fp));

if(a.stat!='f'){

a2.stat='f';
a2.en=a.en;
printf("ftelee=%d\n",ftell(fp));
printf("empty=%d\n",ftell(fp)/sizeof(A));
fwrite(&a2,sizeof(A),1,fp);
}

else if(a.stat=='f'){
while(a.stat=='f'){

printf("ftel%d\n",ftell(fp));
fseek(fp,sizeof(A),SEEK_CUR);
fread(&a,sizeof(A),1,fp);
// fscanf(fp,"%c",&a2.stat);
printf("stat baadi:%c",a2.stat);
// fseek(fp,-sizeof(A),SEEK_CUR);
a.stat=a2.stat;
printf("stat baadi:%c",a.stat);
printf("full=%d\n",ftell(fp)/sizeof(A));

// if(ftell(fp)>=(Maxsize*sizeof(A))){
// rewind(fp);
// fread(&a,sizeof(A),1,fp);
// fseek(fp,-sizeof(A),SEEK_CUR);
// }
continue;
}

a3.stat='f';
a3.en=a.en;
fwrite(&a3,sizeof(A),1,fp);
printf("ftel%d\n",ftell(fp));
fseek(fp,-(sizeof(A)),SEEK_CUR);
t=ftell(fp);
printf("\tt=%d ",t);

printf("final=%d\n",ftell(fp)/sizeof(A));
}


// t=t/sizeof(int);
// k2=floor(t/Bucsize)+1; //number of bucket
// b2=t%Bucsize+1; //which cell of bucket
// printf("k2=%d k=%d b2=%d\n",k2,k,b2);

printf("\n\n");
rewind(fp);
fclose(fp);

}

alireza643
شنبه 30 تیر 1386, 07:40 صبح
از fstream استفاده کن که دوتا تابع برای باز کردن فایل به صورت ورودی و خروجی داره به اسم ifstream برای ورودی و ofstream برای خروجی.
در ضمن با توضیحی که دادید من مشکل شما رو کامل متوجه نشدم.
شما میخواهید هر دفعه تو یه فایل جدید مطالب رو ذخیره کنید؟

animgr
دوشنبه 01 مرداد 1386, 11:17 صبح
نه هر دفعه ای که update می شه در همان فایل تغییرات را ایجاد بکند...

animgr
دوشنبه 01 مرداد 1386, 11:19 صبح
در ضمن برنامه اشکالش برطرف شد! فقط اسرادش سر این بود که در main فایل را نبسته بودم و برای آن upgrade نمی شد!
اگر مغایر با قوانین نیست می توانم جواب را برایتان اینجا بنویسم!

animgr
دوشنبه 01 مرداد 1386, 11:20 صبح
در ضمن برنامه اشکالش برطرف شد! فقط اسرادش سر این بود که در main فایل را نبسته بودم و برای آن upgrade نمی شد!
اگر مغایر با قوانین نیست می توانم جواب را برایتان اینجا بنویسم!

emad_67
دوشنبه 01 مرداد 1386, 12:13 عصر
مغایر با قوانین نیست ولی توضیحاتت رو تو یه پست بنویس اینجوری بهتره همون اولیه رو edit کن