我使用C编程语言。我有一个包含这样数据的文本文件
4, Ahmed, 7.54
7, Mohammed, 9.50
逗号分隔值,我的问题是我想将这些数据放入变量中,就像这样:
ID: 4
Name: Ahmed
Grade: 7.54
这将是文本文件中的所有记录,我没有解决这个问题,你能帮助我吗?
这是我的代码:
#include <stdio.h>
typedef struct student {
int id;
char name[300];
float grade;
} Student;
int main() {
Student s;
char line[128];
FILE *fp;
fp = fopen("student.txt","a+");
scanf("%d",&s.id);
scanf("%s",&s.name);
scanf("%f",&s.grade);
fprintf(fp,"%d,%s,%.2f\n",s.id,s.name,s.grade);
fclose(fp);
fp = fopen("student.txt","r");
if(fp != NULL) {
while(fgets(line, sizeof line,fp) != NULL) {
if(fputs(line,stdout) == ',')
break;
else
printf("ID: %d",fputs(line,stdout));
printf("NAME: %s",fputs(line,stdout));
printf("GRADE: %.2f",fputs(line,stdout));
}
fclose(fp);
}
else {
perror("student.txt");
}
return 0;
}
答案 0 :(得分:2)
fscanf的这种格式将扫描整数,逗号,不是逗号的所有内容,另一个逗号和浮点数。如果扫描了三个项目,则循环继续。
while((fscanf (fp, "%d,%299[^,],%f", &s.id, s.name, &s.grade)) == 3) {
printf("ID: %d\n",s.id);
printf("NAME: %s\n",s.name);
printf("GRADE: %.2f\n",s.grade));
}
另一种选择是使用fgets和strtok()将行划分为逗号上的标记。