我为我的项目编写了这些代码,但我在这些代码中有错误。此功能的目的是在此文件中添加新客户端。当我处理它时,没关系,但是如果我想从文件中查看我的客户端我处理搜索功能,它比我的客户更喜欢这个。我尝试使用fscanf来处理它,但是当我尝试它时,我的添加功能不能完全正常工作,因为它不是'kisiler.iz'(意思是注册轨道)。 Like that
void ekle(struct kisiyapi kisiler)
{
char secenek;
dosya=fopen("kisiler.txt","a+");
do
{
kisiler.iz=' ';
printf("Kisi no giriniz\n");
scanf("%d",&kisiler.kisino);
kaypos=(kisiler.kisino-1) * sizeof(kisiler);
fseek(dosya,kaypos,SEEK_SET);
fread(&kisiler,sizeof(kisiler),1,dosya);
if(kisiler.iz!='*')
{
printf("Kisinin adini giriniz\n");
scanf("%s",&kisiler.ad);
printf("Kisinin soyadini giriniz\n");
scanf("%s",&kisiler.soyad);
printf("Kisinin Ev Telefonunu giriniz\n");
scanf("%s",&kisiler.evtel);
printf("Kisinin Cep Telefonunu giriniz\n");
scanf("%s",&kisiler.ceptel);
printf("Kisinin Is Telefonunu giriniz\n");
scanf("%s",&kisiler.istel);
printf("Kisinin Dogum tarihini sirasiyla gun/ay/yil olarak giriniz\n");
scanf("%d",&kisiler.dogumgunu);
scanf("%d",&kisiler.dogumayi);
scanf("%d",&kisiler.dogumyili);
printf("Kisinin yasadigi Il girin\n");
scanf("%s",&kisiler.il);
printf("Kisinin yasadigi Ilce girin\n");
scanf("%s",&kisiler.ilce);
printf("Kisinin yasadigi mahalleyi girin\n");
scanf("%s",&kisiler.mahalle);
printf("Kisinin yasadigi sokak no girin\n");
scanf("%s",&kisiler.sokak);
kisiler.iz='*';
fseek(dosya,kaypos,SEEK_SET);
fwrite(&kisiler,sizeof(kisiler),1,dosya);
}
else
{
printf("Mevcut kayit var\n");
}
printf("\nTekrar ekleme yapmak istiyor musunuz ? [e veya h]");
secenek=getch();
}
while(secenek!='h');
fclose(dosya);
}
这些代码的目的是任何客户的更新信息,但它不起作用,因为我的feof
循环不工作或永远工作。因此,我无法更新我的信息。
void guncelle(struct kisiyapi kisiler)
{
char aranan[20];
int i=0;
dosya=fopen("kisiler.txt","r");
yeni=fopen("temp.txt","w");
if(dosya==NULL)
printf("Dosyaya ulasilamadi\n");
printf("Guncellemek istediginiz kisinin adini giriniz\n");
scanf("%s",aranan);
while(!feof(dosya))
{
i++;
}
/*
while(!feof(dosya))
{
fread(&kisiler,sizeof(kisiler),1,dosya);
kaypos=(kisiler.kisino-1) * sizeof(kisiler);
if(strcmp(aranan,kisiler.ad)==0)
{
printf("Kisinin adini giriniz\n");
scanf("%s",&kisiler.ad);
printf("Kisinin soyadini giriniz\n");
scanf("%s",&kisiler.soyad);
printf("Kisinin Ev Telefonunu giriniz\n");
scanf("%s",&kisiler.evtel);
printf("Kisinin Cep Telefonunu giriniz\n");
scanf("%s",&kisiler.ceptel);
printf("Kisinin Is Telefonunu giriniz\n");
scanf("%s",&kisiler.istel);
printf("Kisinin Dogum tarihini sirasiyla gun/ay/yil olarak giriniz\n");
scanf("%d",&kisiler.dogumgunu);
scanf("%d",&kisiler.dogumayi);
scanf("%d",&kisiler.dogumyili);
printf("Kisinin yasadigi Il girin\n");
scanf("%s",&kisiler.il);
printf("Kisinin yasadigi Ilce girin\n");
scanf("%s",&kisiler.ilce);
printf("Kisinin yasadigi mahalleyi girin\n");
scanf("%s",&kisiler.mahalle);
printf("Kisinin yasadigi sokak no girin\n");
scanf("%s",&kisiler.sokak);
kisiler.iz='*';
fseek(yeni,kaypos,SEEK_SET);
fprintf(dosya,"%s\t%s\t%s\t%s\t%s\t%d %d %d\t%s\t%s\t%s\t%s\t%c",kisiler.ad,kisiler.soyad,kisiler.evtel,kisiler.ceptel,kisiler.istel
,*kisiler.dogumgunu,*kisiler.dogumayi,*kisiler.dogumyili,kisiler.il,kisiler.ilce,kisiler.mahalle,kisiler.sokak,kisiler.iz);
}
else if(strcmp(aranan,kisiler.ad)!=0)
{
fseek(yeni,kaypos,SEEK_SET);
fseek(dosya,kaypos,SEEK_SET);
fwrite(&kisiler,sizeof(kisiler),1,yeni);
}
}
fclose(dosya);
fclose(yeni);
*/
}
如果您了解我的代码,请帮助我,我没有时间准备它。
只有在您尝试从文件末尾读取时才会设置“eof”标志。你的循环不会从文件中读取任何内容,因此它永远不会到达终点并将永远继续。
而且非常相关,你应该阅读Why is “while ( !feof (file) )” always wrong?。