C 文件程序不执行 fopen

C File program doesnt execute fopen

在turbo c++中保存程序后,保存的地方没有显示文件的各个组成部分,它的执行twice.Its大学project.The问题似乎是代码部分为打开和 for 循环编写

#include<stdio.h>
typedef struct
{
      int select;
      char lastname[25];
      char firstname[25];
      char address[25];
      char phonenumber[25];
} addressbook;

#define ARRAYLEN 2

addressbook a[ARRAYLEN];
FILE *fp;

int main()
{
     int i;

     fp = fopen("addressbook.dat","a+");

     for( i=0; i<ARRAYLEN ; i++)
     {
       printf("enter details\n");
       printf("enter lastname:\n");
       scanf("%s", a[i].lastname);
       printf("enter firstname:\n");
       scanf("%s", a[i].firstname);
       printf("enter address:\n");
       scanf("%s", a[i].address);
       printf("enter phone number:\n");
       scanf("%s", a[i].phonenumber);
       fwrite(&a[i], sizeof(a), 1, fp); /* notice, array indexed */
    }
    fclose(fp);

    fopen("addressbook.dat", "r");
    for(i=0; i<ARRAYLEN; i++)
    {
      fread(&a[i], sizeof(a), 1, fp );
      printf("lastname:%s\n", a[i].lastname);
      printf("firstname:%s\n", a[i].firstname);
      printf("address:%s\n", a[i].address);
      printf("phonenumber:%s\n", a[i].phonenumber);
    }
    fclose(fp);

    return 0;
}

问题在于使用 'fp' - 文件指针。

第一次使用fopen后,您正在关闭它,然后再次使用fopen。

但这一次,您没有将它的return值放入fp。因此,您的后续操作(如恐惧)会产生不确定的结果。

请替换-

fopen("addressbook.dat", "r");

fp = fopen("addressbook.dat", "r");

您代码中的其他问题 -

  1. 始终检查 return 值

  2. 您需要验证从用户那里收到的值,不要超过允许的 space 给变量

  3. 这是不言而喻的,但是您在当前解决方案中使用了两次 fclose(fp)