标题:C语言把txt赋给结构体
只看楼主
sgyr
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-5
 问题点数:0 回复次数:11 
C语言把txt赋给结构体
typedef struct employee
{
    int    eid;        
    char    name[30];   
    char    gender;        
    int    age;        
    float    score;        
    char    level;        
} Emp;
Emp emp[20];
void WriteFile()
{
    int i;
    FILE *p;
    p = fopen("D:\\aaa.txt","w");
    for ( i = 0; i < n; i++)
    {
        fprintf(p, "%d,", emp[i].eid);
        fprintf(p, "%s,", emp[i].name);
        fprintf(p, "%c,", emp[i].gender);
        fprintf(p, "%d,", emp[i].age);
        fprintf(p, "%f,", emp[i].score);
    }
    fclose(p);
}

int ReadFile()
{
    FILE *p = fopen("D:\\aaa.txt", "r");
    int i;
    for (i=0; feof(p); i++)
    {
        fscanf(p, "%d,", &emp[i].eid);\\
        fscanf(p, "%s,", emp[i].name);\\
        fscanf(p, "%c,", &emp[i].gender);\\
        fscanf(p, "%d,", &emp[i].age);\\
        fscanf(p, "%f,", &emp[i].score);\\
        if (SetLevel(emp[i].score) == 1)
            emp[i].level = 'O';
        else if (SetLevel(emp[i].score) == 2)
            emp[i].level = 'E';
        else if (SetLevel(emp[i].score) == 3)
            emp[i].level = 'A';
        else if (SetLevel(emp[i].score) == 4)
            emp[i].level = 'P';
        else
            emp[i].level = 'D';
        n++;
    }
    return 0;
}
主程序和其他函数没写    用不来C的文件 求指导 帮别人做作业 他们老师不让用C++ 有问题的都用\\标记了
搜索更多相关主题的帖子: employee 结构体 C语言 
2015-04-05 16:58
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
得分:0 
回复 楼主 sgyr
有没有注意清空空格 或者回车
2015-04-05 17:08
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
看楼主所定义的结构体不含指向本结构之外的指针域
这种情况下用二进制模式打开文件
使用fwrite和fread来读写更便捷
也更容易保证数据读写的一致性

如果用文本模式打开文件
由于结构内的变量转换为字符打印到文件时
同一变量的长度也难保持一致
会造成写完后读取数据混乱
为避免这种情况
你可能要写专门的函数
对文件的写、读进行格式控制
这增强了复杂度
除非为了跨平台
否则得不偿失

Only the Code Tells the Truth             K.I.S.S
2015-04-05 17:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
又是帮别人做作业的。

授人以渔,不授人以鱼。
2015-04-05 18:31
sgyr
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-5
得分:0 
回复 3楼 longwu9t
但是  应该怎么弄 存倒是存进去了 就是读出来 读不出来
2015-04-05 20:15
sgyr
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-5
得分:0 
回复 2楼 风车转风车89
没有   存进去的txt文件自动是给我加的, 逗号
2015-04-05 20:15
sgyr
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-5
得分:0 
回复 4楼 TonyDeng
不能怪我啦   我难不成看着我高中同学挂科啊
2015-04-05 20:18
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
回复 5楼 sgyr
这是一段我以前练习时写的代码

以二进制模式打开文件
把结构写入文件
再读取
然后再修改
再把修改后的数据写入文件

与你的题目要求可能不符
但道理是一样的
你针对性的修改一下就可以了

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NAME_LEN 25
#define MAX_PARTS 100

typedef struct part {
    int number;
    char name[NAME_LEN + 1];
    int on_hand;
} PART, *PA;

PART inventory[MAX_PARTS] = {
    {1, "abc", 9},
    {2, "bcd", 8},
};

int num_parts = 2;

int main(void) {
    FILE *fp;
    int i;
    fp = fopen("invent.dat", "wb+");

    if(!fp) {
        fprintf(stderr, "Cant't open inventory file\n");
        exit(EXIT_FAILURE);
    }

    fwrite(inventory, sizeof(PART), num_parts, fp);
    rewind(fp);
    num_parts = fread(inventory, sizeof(PART), MAX_PARTS, fp);

    for(i = 0; i < num_parts; i++)
        inventory[i].on_hand = 0;

    inventory[2].number = 3;
    strcpy(inventory[2].name, "haha");
    inventory[2].on_hand = 5;
    rewind(fp);
    fwrite(inventory, sizeof(PART), num_parts + 1, fp);
    fclose(fp);
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-04-05 20:23
sgyr
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-5
得分:0 
回复 8楼 longwu9t
求 帮我改啊 帮我改
2015-04-06 00:03
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
回复 9楼 sgyr
OK 给你改

程序代码:
#include <stdio.h>
#include <string.h>

typedef struct {
    int id;
    char name[30];
    char sex;
    int age;
    double score;
    char level;
} EMP;

//定义函数打印结构数组内容到屏幕
void prt_emp(EMP *emp, int len) {
    int i = -1;
    while(++i < len) {
        printf("%d\t%s\t%c\t%d\t%f\t\%c\n",
                emp[i].id, emp[i].name, emp[i].sex,
                emp[i].age, emp[i].score, emp[i].level);
    }
}

int main(void) {
    //定义并初始化结构数组
    EMP emp[] = {
        {201501001, "aaa", 'F', 17, 67.5, 'C'},
        {201501002, "bbb", 'M', 18, 82.6, 'B'},
    };
    //求出结构数组的元素个数
    int len = sizeof(emp) / sizeof(EMP);
    //以二进制读写打开文件
    FILE *fp = fopen("emp.data", "wb+");
    //文件打开失败就退出
    if(!fp) return 1;
    //写入文件
    fwrite(emp, sizeof(EMP), len, fp);
    //打印结构数组
    prt_emp(emp, len);
    //初始化结构数组 内容清空
    memset(emp, 0, sizeof(emp));
    //打印清空后的结构数组
    prt_emp(emp, len);
    //重置文件指针到文件的开始处
    rewind(fp);
    //从文件读取内容到结构数组
    fread(emp, sizeof(EMP), len, fp);
    //打印再次读入的结构数组内容
    prt_emp(emp, len);
    //关闭文件指针
    fclose(fp);
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-04-06 13:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443585-1-1.html




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

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