C语言从文本文件读取数据到结构体数组中的问题
定义如下:structstudent{charno[9];charname[10];floatmark;};typedefstructstudentSTU;STU*tem...
定义如下:struct student{ char no[9]; char name[10]; float mark;};typedef struct student STU; STU *temp;____________________________________这是student.txt文件里的文本:
01010101,ABCEVVZ,96.000000020202,EFGWE,56.0000000303,HIJRWE,67.500000
____________________________________
这是我自己弄的读取部分:
temp=(STU *)malloc(100 * sizeof(STU));int n;FILE *fp;fp=fopen("student.txt","r");for(n=0;n<100;n++){ fscanf(fp,"%s,%s,%f\n",temp[n].no,temp[n].name,temp[n].mark); printf("%s\n",temp[n].no); printf("%s\n",temp[n].name); printf("%f\n",temp[n].mark);}____________________________________
我想把01010101给temp[0].no,ABABCEVVZ给temp[0].name,96.000000给temp[0].mark;020202给temp[1].no,EFGWE给temp[1].name,56.000000给temp[1].mark;以此类推,而且txt文件里的行数是不确定的,在1-99之间,要求读完文本最后一行时能结束循环。
可是我弄出来是这样子的T^T,请问该如何修改,求大神指点!!先谢谢了 展开
01010101,ABCEVVZ,96.000000020202,EFGWE,56.0000000303,HIJRWE,67.500000
____________________________________
这是我自己弄的读取部分:
temp=(STU *)malloc(100 * sizeof(STU));int n;FILE *fp;fp=fopen("student.txt","r");for(n=0;n<100;n++){ fscanf(fp,"%s,%s,%f\n",temp[n].no,temp[n].name,temp[n].mark); printf("%s\n",temp[n].no); printf("%s\n",temp[n].name); printf("%f\n",temp[n].mark);}____________________________________
我想把01010101给temp[0].no,ABABCEVVZ给temp[0].name,96.000000给temp[0].mark;020202给temp[1].no,EFGWE给temp[1].name,56.000000给temp[1].mark;以此类推,而且txt文件里的行数是不确定的,在1-99之间,要求读完文本最后一行时能结束循环。
可是我弄出来是这样子的T^T,请问该如何修改,求大神指点!!先谢谢了 展开
1个回答
展开全部
关键问题是用 逗号分隔的 字符串 ,不能用 逗号格式 这样分开地读出来。
要用 "%[^,],%[^,],%f" 格式 才行。
另外 读参数用 &temp[n].mark 才行,你漏了 &.
--------
你先用下面程序读2行,
01010101,ABABCEVVZ,96.0
020202,EFGWE,56.0
试验成功再读全部。
#include<stdio.h>
#include<math.h>
struct student
{
char no[9];
char name[10];
float mark;
};
typedef struct student STU;
STU *temp;
int main(){
int n;
FILE *fp=fopen("student.txt","r");
temp=(STU *)malloc(100 * sizeof(STU));
for (n=0;n<2;n++){
fscanf(fp,"%[^,],%[^,],%f",temp[n].no,temp[n].name, &temp[n].mark);
printf("%s %s %f\n",temp[n].no,temp[n].name,temp[n].mark);
}
fclose(fp);
}
--
读完的控制用 if (fscanf(...)==EOF) break;
要用 "%[^,],%[^,],%f" 格式 才行。
另外 读参数用 &temp[n].mark 才行,你漏了 &.
--------
你先用下面程序读2行,
01010101,ABABCEVVZ,96.0
020202,EFGWE,56.0
试验成功再读全部。
#include<stdio.h>
#include<math.h>
struct student
{
char no[9];
char name[10];
float mark;
};
typedef struct student STU;
STU *temp;
int main(){
int n;
FILE *fp=fopen("student.txt","r");
temp=(STU *)malloc(100 * sizeof(STU));
for (n=0;n<2;n++){
fscanf(fp,"%[^,],%[^,],%f",temp[n].no,temp[n].name, &temp[n].mark);
printf("%s %s %f\n",temp[n].no,temp[n].name,temp[n].mark);
}
fclose(fp);
}
--
读完的控制用 if (fscanf(...)==EOF) break;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询