在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;
}
Run Code Online (Sandbox Code Playgroud)
问题在于使用'fp' - 文件指针.
在第一次使用fopen之后,你正在关闭它,然后再次使用fopen.
但这一次,你不是把它的值返回到fp.因此,您的后续操作(如fread)会产生未经确定的结果.
请更换 -
fopen("addressbook.dat", "r");
Run Code Online (Sandbox Code Playgroud)
同
fp = fopen("addressbook.dat", "r");
Run Code Online (Sandbox Code Playgroud)
代码中的其他问题 -
始终检查返回值
您需要验证从用户收到的值,不要超过给予变量的允许空间
毋庸置疑,但你在你的相关解决方案中使用fclose(fp)两次