c - C 中的文件处理

标签 c file process

我为我的项目编写了这些代码,但这些代码有错误。 该函数的目的是在此文件中添加新的客户端。当我处理它时,没关系,但如果我想从文件中查看我的客户,我会处理搜索功能,它比我的客户更能帮助我。我尝试使用 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? .

关于c - C 中的文件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956887/

相关文章:

c++ - 如何以编程方式在 linux 中获取设备/分区的 uuid?

c - 在标准 C 中使用 char 数组存储多种数据类型

vb.net - 在 .NET 中截断日志文件的开头

c - 什么执行进程和线程生成进程

c - 如何使用 C 中的数组表示法访问 char *?

c - 序数导出的函数是如何调用的?

java - 如何分割多行并将它们添加到数组列表中

java - 未抛出 FileAlreadyExistsException 并覆盖文件

c# - 处理器使用情况(强制完全使用)

linux - 调用 fork() 时哪个进程先运行