部分数据丢失,第一个和第二个number[1]丢失,其余正常

#include<stdio.h>
#include<stdlib.h>
#define LEN 100
struct contact_type
{

char name[10];
char hometown[10];
long number[2];
char mail[10];

}cont[LEN];
void save()//文件输入
{
int i=0;
FILE *fp;
if((fp=fopen("con.dat","web"))==NULL)
{
printf("can not open file\n");
return ;
}
for(i=0;i<LEN;i++)
if(fwrite(&cont[i],sizeof(struct contact_type),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int creat(struct contact_type cont[LEN])//文件输入
{
int i=0;
char c;
printf("请依次输入姓名,籍贯,电话号码1,电话号码2,电子邮箱(中间用空格隔开,以! ! ! ! !结束输入):\n");
do
{
scanf("%s%s%ld%ld%s",&cont[i].name,&cont[i].hometown,&cont[i].number[0],&cont[i].number[1],&cont[i].mail);
i=i+1;
}
while(c=getchar()!='!');
return (i);
save();
}
int main()
{
FILE *fp;
int i=0,n=0;
n=creat(cont)-1;
if((fp=fopen("con.dat","rb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fread(&cont[i],sizeof(struct contact_type),1,fp);
printf("姓名:%s 籍贯:%s 电话号码1:%ld 电话号码2:%ld 电子邮箱:%s\n",cont[i].name,cont[i].hometown,cont[i].number[0],cont[i].number[1],cont[i].mail);
}
fclose(fp);
return 0;
}

经过测试,发现是文件名为con开头导致创建文件失败,但是程序又跳过了文件指针为空的检测。(通过搜索发现文件名为con是DOS下的特殊设备名,所以导致一系列的异常。)
把文件名改为 contact.dat后,发现程序正常执行了。修改如下:
参考链接:
为什么windows里不能建立文件名为con的任何文件和文件夹(转)_noock的博客-CSDN博客

#include<stdio.h>
#include<stdlib.h>
#define LEN  2
struct contact_type
{
    char name[10];
    char hometown[10];
    long number[2];
    char mail[10];
}cont[LEN];

void save()//文件输入
{
    int i=0;
    FILE *fp =fopen("contact.dat","w");
    
    if(fp==NULL)
    {
        printf("can not open file\n");
        return ;
    }
    for(i=0;i<LEN;i++){
    //    printf("开始写入文件!\n");
        fwrite(&cont[i],sizeof(struct contact_type),1,fp);
        
    }
            
    fclose(fp);
}

int creat()//文件输入
{
    int i;
    char c;
    printf("请依次输入姓名,籍贯,电话号码1,电话号码2,电子邮箱(中间用空格隔开,以!结束输入):\n");
    for(i=0;i<LEN;i++){
        
        scanf("%s %s %ld %ld %s",cont[i].name,cont[i].hometown,&cont[i].number[0],&cont[i].number[1],cont[i].mail);
        //printf("%s %s %ld %ld %s",cont[i].name,cont[i].hometown,cont[i].number[0],cont[i].number[1],cont[i].mail);
        
        
    }
    
    save();
    
    return (i);
}

int main()
{
    
    int i=0,n=0;
        
    creat(); 
    
    FILE *fp =fopen("contact.dat","r");
    
    if(fp==NULL)
    {
        printf("can not open file\n");
        return -1;
    }

    
    for(i=0;i<LEN;i++)
    {
    //    printf("开始读取文件!\n");
        fread(&cont[i],sizeof(struct contact_type),1,fp);
        printf("姓名:%s 籍贯:%s 电话号码1:%ld 电话号码2:%ld 电子邮箱:%s\n",cont[i].name,cont[i].hometown,cont[i].number[0],cont[i].number[1],cont[i].mail);
    }
    fclose(fp);
    return 0;
}

img