推荐阅读原文: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;
}