数据的持久化保存

推荐阅读原文:https://blog.csdn.net/eye_water/article/details/80551444

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int num = 0; // 当前数据为0
typedef struct node {    // 定义结构体,存用户数据
    int ID;              // 用户编号
    char username[10];   // 用户名
    char userPwd[10];    // 密码
    char Cmoney[30];     // 字符型的余额
    double money;        // 用户的余额
    int status;          // 状态 1:正常 2:已挂失 0:已销户
} ty;
ty users[2005]; //最多存储2005个用户信息。


void get_two_dimension(char* line, double** data, char *filename);
void print_two_dimension(double** data, int row, int col);
int get_row(char *filename);
int get_col(char *filename);

int main()
{
    int i;
    char filename[] = "d:\\date.csv";
    char line[1024];
    double **data;
    int row, col;
    row = get_row(filename);
    col = get_col(filename);
    data = (double **)malloc(row * sizeof(int *));
    for (i = 0; i < row; ++i){
        data[i] = (double *)malloc(col * sizeof(double));
    }//动态申请二维数组
    get_two_dimension(line, data, filename);
    print_two_dimension(data, row, col);
}

void get_two_dimension(char* line, double** data, char *filename)
{
    FILE* stream = fopen(filename, "r");
    int i = 0;
    while (fgets(line, 1024, stream))//逐行读取
    {
        int j = 0;
        char *tok;
        char* tmp = strdup(line);
        int cnt = 0;
        for (tok = strtok(line, ","); tok && *tok; j++, tok = strtok(NULL, ",\n")){
            if ( cnt==0 ) {
                users[i].ID = atoi(tok);
            }
            else if ( cnt==1 ) {
                strcpy(users[i].username,tok);
            }
            else if ( cnt==2 ) {
                strcpy(users[i].userPwd,tok);
            }
            else if ( cnt==3 ) {
                users[i].money = atof(tok);
            }
            else if ( cnt==4 ) {
                users[i].status = atoi(tok);
            }
            cnt ++;
        }//字符串拆分操作
        i++;
        free(tmp);
    }
    fclose(stream);//文件打开后要进行关闭操作
}

void print_two_dimension(double** data, int row, int col)
{
    int i, j;
    for(i=1; i<row; i++){
        printf("ID = %d name = %s pwd = %s money = %.4f status = %d\n",users[i].ID,users[i].username,users[i].userPwd,users[i].money,users[i].status);
    }//打印的时候不打印第一行,第一行全是字符
}

int get_row(char *filename)
{
    char line[1024];
    int i;
    FILE* stream = fopen(filename, "r");
    while(fgets(line, 1024, stream)){
        i++;
    }
    fclose(stream);
    return i;
}

int get_col(char *filename)
{
    char line[1024];
    int i = 0;
    FILE* stream = fopen(filename, "r");
    fgets(line, 1024, stream);
    char* token = strtok(line, ",");
    while(token){
        token = strtok(NULL, ",");
        i++;
    }
    fclose(stream);
    return i;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值