PDA

View Full Version : مشكل در خواندن از فايل



hsnm8869
دوشنبه 03 خرداد 1389, 15:31 عصر
در برنامه ي زير اطلاعات چندين كاربر (در هر بار اجرا 1 كاربر)را مي خواند و در ادامه ي فايل ذخيره مي كند
چرا در هنگام خواندي فايل كاربر آخر را دوبار مي خواند

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

struct user{
char name[20];
char id[10];
};

int main()
{
FILE *p;
if((p=fopen("g://employe4.txt","at"))==NULL)
{
printf("not acce");
getch();
exit( 0);
}
struct user etelaat,a;
printf("enter name:");
gets(etelaat.name);
printf("enter id:");
gets(etelaat.id);
fwrite(&etelaat,sizeof(struct user),1,p);
fclose(p);
if((p=fopen("g://employe4.txt","r+"))==NULL)
{
printf("not acce");
getch();
exit( 0);
}
rewind(p);

while(!feof(p))
{
fread(&a,sizeof(struct user),1,p);
printf("\nname users:\n%s\n",a.name);
}
getch();
return 0;
}

saber187518
دوشنبه 03 خرداد 1389, 19:46 عصر
سلام دوست عزیز
مشکلش رو نتونستم فعلا پیدا کنم.
ولی چون id قراره که یکتا باشه اگه کد شما رو به کد زیر تغییر بدیم درست کار میکنه.


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

struct user{
char name[20];
char id[10];
};

int main()
{
FILE *p;
if((p=fopen("g://employe4.txt","at"))==NULL)
{
printf("not acce");
getch();
exit( 0);
}
struct user etelaat,a,b;
printf("enter name:");
gets(etelaat.name);
printf("enter id:");
gets(etelaat.id);
fwrite(&etelaat,sizeof(struct user),1,p);
fclose(p);
if((p=fopen("g://employe4.txt","r+"))==NULL)
{
printf("not acce");
getch();
exit( 0);
}
rewind(p);

while(!feof(p))
{
fread(&a,sizeof(struct user),1,p);
if(strcmp(b.id,a.id)==0)
break;
printf("\nname users:\n%s\n",a.name);
b=a;
}
getch();
return 0;
}

موفق باشی