| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4212 人关注过本帖
标题:关于结构体存储到文件中并输出
只看楼主 加入收藏
ccc菜鸟,
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2015-11-20
结帖率:75%
收藏
已结贴  问题点数:4 回复次数:29 
关于结构体存储到文件中并输出
初学者不是很懂,我在做学生管理系统,但是我的疑问是如果我将值赋到结构体里为何还要赋值到文件里呢?如果赋值到文件又该怎么赋值并输出呢?
附上我的程序,请大神指教。
#include<stdio.h>
#include<stdlib.h>
struct info
{
    float a;
    char b[40];
    char c[40];
    char d[40];
    float e;
    float f;
    float g;
    float h;
    float i;
    float j;
};
struct info info[10000];
int record(int i){
    printf("input your id\n");
    scanf("%f", &info[i].a);
    printf("input your firstname\n");
    scanf("%s", &info[i].b);
    getchar();
    printf("input your lastname\n");
    scanf("%s", &info[i].c);
    getchar();
    printf("input your e-mail\n");
    scanf("%s", &info[i].d);
    getchar();
    printf("input your a\n");
    scanf("%f", &info[i].e);
    printf("input your b\n");
    scanf("%f", &info[i].f);
    printf("input your c\n");
    scanf("%f", &info[i].g);
    printf("input your d\n");
    scanf("%f", &info[i].h);
    printf("input your e\n");
    scanf("%f", &info[i].i);
    printf("input your f\n");
    scanf("%f", &info[i].j);
    FILE*fp;
    if ((fp = fopen("1.text", "wb")) == NULL){
        printf("wrong");
    }
    fwrite(&info[i], sizeof(info[i]), i, fp);
}
int find(int id){
    int i = 0;
    for (i = 0; i < 1000; i++)
    {
        if (id == info[i].a){
            return i;
            break;
        }
    }
    return -1;
}
int mark(int i){
    return(info[i].e + info[i].f + info[i].g + info[i].h + info[i].i + info[i].j) / 6;
}
display(int z){
    FILE*fp;
    if ((fp = fopen("1.text", "r+")) == NULL){
        printf("wrong");
    }
    fprintf(fp,"%s",info[z].b);
}

int main(){
    int choose;
    int j = 0;
    FILE*fp;
    while (1){
        printf("choose\n");
        scanf("%d", &choose);
        switch (choose)
        {
        case 1:j = j + 1; record(j);break;
        case 2:printf("please enter your id\n"); int ID; scanf("%d", &ID); int z = find(ID); int y = mark(z); printf("%d\n", y); display(z); break;
        default:break;
        }
    }
}
搜索更多相关主题的帖子: include 管理系统 record 结构体 
2015-11-25 20:52
ccc菜鸟,
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2015-11-20
收藏
得分:0 
有人帮忙吗,谢谢了!
2015-11-25 22:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
如果你的數據不儲存在文件中,當程序結束之後,數據還在嗎?下次不厭其煩地重新輸入進去?

授人以渔,不授人以鱼。
2015-11-25 22:42
ccc菜鸟,
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2015-11-20
收藏
得分:0 
回复 3楼 TonyDeng
大神不是特别懂你的意思啊。。
2015-11-25 22:50
ccc菜鸟,
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2015-11-20
收藏
得分:0 
回复 3楼 TonyDeng
现在在自学文件,但是结构体就会每次输入时赋值并且保存啊。
2015-11-25 22:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你問爲什麽要“賦值”到文件中,我答這個呀。

授人以渔,不授人以鱼。
2015-11-25 22:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你沒學過内存和外存概念的麽?

授人以渔,不授人以鱼。
2015-11-25 22:55
ccc菜鸟,
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2015-11-20
收藏
得分:0 
回复 6楼 TonyDeng
嗯嗯,有点明白,储存在.text作业要求之一。但是结构体不是要储存在二进制的文件中嘛?
2015-11-25 22:55
ccc菜鸟,
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2015-11-20
收藏
得分:0 
回复 7楼 TonyDeng
没有。现在自学c 2个月,老师只讲了文件概念,让我们自己摸索。
2015-11-25 22:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
結構體衹是一個數據的組織形式,在内存中使用時是二進制的,但内存有一個特點,就是程序結束或斷電之後,内存中是所有東西都會消失。當你的管理系統數據有一定量的時候,你肯定不會想每次運行都把成百上千個數據重新輸入一次,那就必須把已經輸入和整理好的數據轉存在外存上,以便下次直接讀取,無需重複勞動。這就爲什麽要存到外部文件的原因。

數據儲存在外部文件,未必一定要以二進制的形式,也可以是文本(文本是指人可以閲讀的文字)格式。以什麽格式保存數據,有不同的讀寫方式,各有優缺點,視系統具體需要而定。舉個例子,當你用scanf()從鍵盤中輸入數字12時,實際上就是在一個叫控制臺標準輸入文件(stdin)中讀入一個字符串"12",這個字符串就是文本格式,scanf()把這個字符串計算轉換爲機器内部數值12才是你需要的數據,後者叫二進制格式(又叫内存格式,與數學進制不是一回事)。

結構體在内存中,全部是内存格式,但輸出到外存時,是你可以選擇格式的,衹要讀回來時用匹配的方式即可。

授人以渔,不授人以鱼。
2015-11-25 23:08
快速回复:关于结构体存储到文件中并输出
数据加载中...
 
   



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

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