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");
您代码中的其他问题 -
始终检查 return 值
您需要验证从用户那里收到的值,不要超过允许的 space 给变量
这是不言而喻的,但是您在当前解决方案中使用了两次 fclose(fp)
在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");
您代码中的其他问题 -
始终检查 return 值
您需要验证从用户那里收到的值,不要超过允许的 space 给变量
这是不言而喻的,但是您在当前解决方案中使用了两次 fclose(fp)