| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 296 人关注过本帖
标题:关于文件的知识,丢失数据,是怎么回事儿
只看楼主 加入收藏
xhay
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:26
专家分:7
注 册:2012-10-19
结帖率:44.44%
收藏
已结贴  问题点数:10 回复次数:2 
关于文件的知识,丢失数据,是怎么回事儿
#include"stdio.h"
#include"math.h"
#include"string.h"
#include"stdlib.h"
FILE *fp;
struct information
{
    long num;
    char name[20];
    char major[20];
    float Math;
    float Chinese;
    float English;
}stu[30];
void main()
{
    int a,i,j=1;
    if((fp=fopen("D:\\work\\test.txt","a+"))==NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    for(i=0; i<30;i++)//把文件中的内容储存到结构体中
        {
            fread(&stu[i],sizeof(struct information),1,fp);
        }
    fclose(fp);
    printf("1.录入学生信息\n");
    printf("2.输出学生信息\n");
    scanf("%d",&a);
    switch(a)

    {
    case 1:
        for(i=0;i<30;i++)
        {
            if((fp=fopen("D:\\work\\test.txt","a"))==NULL)
            {
                printf("cannot open this file\n");
                exit(0);
            }
            printf("--------------------------------\n");
            printf("请输入第%d位的学号:",j);
            scanf("%ld",&stu[i].num);
            printf("--------------------------------\n");
            printf("请输入第%d位的姓名:",j);
            scanf("%s",stu[i].name);
            printf("--------------------------------\n");
            printf("请输入第%d位的专业:",j);
            scanf("%s",stu[i].major);
            printf("--------------------------------\n");
            printf("请输入第%d位的数学成绩:",j);
            scanf("%f",&stu[i].Math);
            printf("--------------------------------\n");
            printf("请输入第%d位的语文成绩:",j);
            scanf("%f",&stu[i].Chinese);
            printf("--------------------------------\n");
            printf("请输入第%d位的英语成绩:",j);
            scanf("%f",&stu[i].English);
            printf("--------------------------------\n");
            j++;
            fwrite(&stu[i],sizeof(struct information),1,fp);
            fclose(fp);
        }
        break;
    case 2:
            printf("\tN0.\tname\tmajor\tMath\tChinese\tEnglish\n");
            for(i=0,j=1;i<30;i++)
            {
                printf("-------------------------------------------------------\n");
                printf("%d\t",j);
                printf("%d",stu[i].num);
                printf("\t%s",stu[i].name);
                printf("\t%s",stu[i].major);
                printf("\t%.1f",stu[i].Math);
                printf("\t%.1f",stu[i].Chinese);
                printf("\t%.1f",stu[i].English);
                printf("\n");
                j++;
            }
            fclose(fp);
            break;
    }
}



用文件的方法录入信息后,查询信息是从第26个开始信息就丢失了,这是什么问题???
搜索更多相关主题的帖子: English Chinese include 
2012-12-28 21:43
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:7 
哥们你牛,测试竟超过26组数据,真有耐心啊,我一般测两组三组过了就OK了。
在楼主的代码中,连续打开了31次文件,虽然是追加打开,感觉没必要吧

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-28 22:15
xhay
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:26
专家分:7
注 册:2012-10-19
收藏
得分:0 
回复 2楼 yaobao
那个打开文件确实多余了,这是一个作业的一部分,必须是30个元素。做好了测试,这里就出现数据丢失
2012-12-28 22:28
快速回复:关于文件的知识,丢失数据,是怎么回事儿
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022679 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved