这代码,怎一个焦字了的? 2022-07-02 21:56 采纳率: 100%
浏览 24
已结题

部分数据丢失,第一个和第二个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;
}

  • 写回答

1条回答 默认 最新

  • a5156520 2022-07-03 00:23
    关注

    经过测试,发现是文件名为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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月11日
  • 已采纳回答 7月3日
  • 修改了问题 7月2日
  • 创建了问题 7月2日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么