C中的文件处理

问题描述 投票:-2回答:1

我为我的项目编写了这些代码,但我在这些代码中有错误。此功能的目的是在此文件中添加新客户端。当我处理它时,没关系,但是如果我想从文件中查看我的客户端我处理搜索功能,它比我的客户更喜欢这个。我尝试使用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);
    */
}

如果您了解我的代码,请帮助我,我没有时间准备它。

c file process
1个回答
2
投票

只有在您尝试从文件末尾读取时才会设置“eof”标志。你的循环不会从文件中读取任何内容,因此它永远不会到达终点并将永远继续。

而且非常相关,你应该阅读Why is “while ( !feof (file) )” always wrong?

© www.soinside.com 2019 - 2024. All rights reserved.