【问题标题】:File Process in CC中的文件处理
【发布时间】:2017-12-23 23:30:28
【问题描述】:

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

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

【问题讨论】:

  • while(!feof(dosya)) { i++; } 几乎肯定不会产生你告诉我们这段代码产生的结果......你在读哪本书?
  • 说“如果你理解我的代码,请帮助我,我没有时间准备它”不是一个好态度——我们没有义务帮助你解决你的作业时间紧迫问题。
  • 很抱歉我的英语拼错了。我的意思是我没有时间。 @JonathanLeffler

标签: c file process


【解决方案1】:

“eof”标志仅在您尝试从文件末尾之外读取时设置。您的循环不会从文件中读取 任何内容,因此它永远不会到达末尾,并且会一直持续下去。

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

【讨论】:

  • 我想多问一些,
  • @B.Yalcin 如果您想问更多问题,欢迎您发布新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多