如何从.txt文件读取并将每一行分隔为不同的字符串并将其存储到不同的结构变量中?

时间:2019-05-05 13:01:36

标签: c

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

struct record
{
     char id[10];
     char firstName[20];
     char lastName[20];
     char score[5];
};

int main()
{
    FILE *fileptr;
    fileptr=fopen("students.txt","r");

    struct record *pinakas;

    pinakas=(struct record *)malloc(17*sizeof(struct record));

    fflush(stdin);
    int i,j;
    for(i=0; i<16; i++)
    {
        fgets(pinakas+i,70,fileptr);
    }

    for(i=0; i<16; i++)
    {
        puts(pinakas+i);
    }

    fclose(fileptr);
    free(pinakas);

    return 0;
}

,假设我有以下.txt文件:

RT56996乔治·克拉克9.0

RT68494艾米莉亚·安德森6.0

。 。

RT5858海伦·怀特10.0

您在这里看到的是我读取了文件并将每一行存储到结构对象“ pinakas”中。问题是我不知道如何将每个(pinakas + i)按空间划分,并将每个字符串存储为id,firstName,lastName,score ...任何想法吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用fscanf作为下面的代码,它是用于扫描文件的功能。 “%[^]”表示扫描所有内容,直到找到''。 “%[^ \ n]”表示扫描所有内容,直到找到'\ n'。

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

struct record{
 char id[10];
 char firstName[20];
 char lastName[20];
 char score[5];
};

int main(){
FILE *fileptr;

int i=0,idx=0;

fileptr=fopen("students.txt","r");
struct record *pinakas;
pinakas=(struct record *)malloc(17*sizeof(struct record));

if(fileptr){
    while(!feof(fileptr)){
        fscanf(fileptr,"%[^ ] %[^ ] %[^ ] %[^\n]\n",pinakas[idx].id,pinakas[idx].firstName,pinakas[idx].lastName,pinakas[idx].score);
        idx++;
    }
}

int i=0;

for(i=0; i<idx; i++){
    printf("%s %s %s %s\n",pinakas[i].id,pinakas[i].firstName,pinakas[i].lastName,pinakas[i].score);
}

fclose(fileptr);

return 0;
}