如何将文本文件数据显示为变量?

时间:2015-04-19 19:15:41

标签: c

我使用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;
}

1 个答案:

答案 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()将行划分为逗号上的标记。