繁体   English   中英

C文件程序未执行fopen

[英]C File program doesnt execute fopen

将程序保存为turbo c ++之后,其保存位置不显示文件的各个组件,并且执行两次。这是一个大学项目。问题似乎出在打开和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。

但是这一次,您没有将其返回值放入fp。 因此,您的后续操作(如fread)会产生不确定的结果。

请更换-

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

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

您代码中的其他问题-

  1. 始终检查返回值

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

  3. 不用说,但是您在Corrent解决方案上使用了两次fclose(fp)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM