C 如何将文件中的数据分配给数据结构

C 如何将文件中的数据分配给数据结构,c,file,data-structures,C,File,Data Structures,我是一个编程新手,我得到了一些帮助。我有一个文件,必须将该文件的数据(名称、地址、序列号、函数)分配给数据结构。我该怎么做 #include<stdio.h>   typedef struct int age; char addres[50]; long serial_num; char function[25]; } pers;    main(){ int i, n, a1; char num_tot[21]= "Number of person: "; FILE *f1; //

我是一个编程新手,我得到了一些帮助。我有一个文件,必须将该文件的数据(名称、地址、序列号、函数)分配给数据结构。我该怎么做

#include<stdio.h>
 
typedef struct
int age;
char addres[50];
long serial_num;
char function[25];
} pers;
 
 main(){
int i, n, a1;
char num_tot[21]= "Number of person: ";
FILE *f1;
//pers p[n];
f1=fopen("bd.txt", "r");
while(!feof(f1)){
    if(fread(&a1, sizeof(f1),1,f1)==num_tot[21]) //bad idea
{

}
}

我只是分享我为您的问题编写的代码。
请记住,我的代码很大程度上取决于文件的一般结构
我希望这将对您有所帮助

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

using namespace std;

typedef struct
{
    int age;
    char addres[50];
    long serial_num;
    char function[25];
} pers;

int main()
{
    FILE *f1;
    f1 = fopen("bd.txt", "r+");

    int n = 0;

    char line[100];
    char ch;

    int i = 0;

    while((ch = fgetc(f1)) && ch!='\n')
    {
        line[i++] = ch;
    }

    for(int k = 18 ; k < i; k++)
    {
        n = n*10 +(line[k]-'0'); 
    }

    pers p[n];

    memset(line , '\0', i);
    i = 0;


    for(int m = 0; m < n; m++)
    {
        while((ch = fgetc(f1)) && ch!='\n')     //blank line 
        {
            continue;
        }

        while((ch = fgetc(f1)) && ch!='\n')     //line of name(we don't need this data)
        {
            continue;
        }

        /////////////

        while((ch = fgetc(f1)) && ch!='\n')     //line of age
        {
            line[i++] = ch;
        }
        int j = 5;
        p[m].age = 0;
        while(line[j] != ' ' && line[j] != '\0')
            p[m].age = p[m].age*10 + (line[j++]-'0');

        memset(line , '\0', i);
        i = 0;

        /////////////

        while((ch = fgetc(f1)) && ch!='\n')     //line of address
        {
            line[i++] = ch;
        }
        j = 8;
        while(j != i)
            p[m].addres[j-8] = line[j++];

        memset(line , '\0', i);
        i = 0;

        //////////////

        while((ch = fgetc(f1)) && ch!='\n')     //line of serial_number
        {
            line[i++] = ch;
        }
        j = 15;
        p[m].serial_num = 0;
        while(line[j] != ' ' && line[j] != '\0')
            p[m].serial_num = p[m].serial_num*10 + (line[j++]-'0');

        memset(line , '\0', i);
        i = 0;

        //////////////

        while((ch = fgetc(f1)) && ch!='\n' && ch != EOF)        //Line of function
        {
            line[i++] = ch;
        }
        j = 10;
        while(j!=i)
            p[m].function[j-10] = line[j++];

        memset(line , '\0', i);
        i = 0;
    }


//  for (int m = 0; m < n; m++)
//  {
//      printf ("%s *** %d *** %s *** %ld\n", p[m].addres , p[m].age , p[m].function , p[m].serial_num);
//  }

    return 0;
}
#包括
#包括
使用名称空间std;
类型定义结构
{
智力年龄;
字符地址[50];
长序列号;
char函数[25];
}pers;
int main()
{
文件*f1;
f1=fopen(“bd.txt”、“r+”);
int n=0;
字符行[100];
char ch;
int i=0;
而((ch=fgetc(f1))&&ch!='\n')
{
行[i++]=ch;
}
对于(int k=18;k
请注意,
main()
不是有效的原型。
#include <stdio.h>
#include <string.h>

using namespace std;

typedef struct
{
    int age;
    char addres[50];
    long serial_num;
    char function[25];
} pers;

int main()
{
    FILE *f1;
    f1 = fopen("bd.txt", "r+");

    int n = 0;

    char line[100];
    char ch;

    int i = 0;

    while((ch = fgetc(f1)) && ch!='\n')
    {
        line[i++] = ch;
    }

    for(int k = 18 ; k < i; k++)
    {
        n = n*10 +(line[k]-'0'); 
    }

    pers p[n];

    memset(line , '\0', i);
    i = 0;


    for(int m = 0; m < n; m++)
    {
        while((ch = fgetc(f1)) && ch!='\n')     //blank line 
        {
            continue;
        }

        while((ch = fgetc(f1)) && ch!='\n')     //line of name(we don't need this data)
        {
            continue;
        }

        /////////////

        while((ch = fgetc(f1)) && ch!='\n')     //line of age
        {
            line[i++] = ch;
        }
        int j = 5;
        p[m].age = 0;
        while(line[j] != ' ' && line[j] != '\0')
            p[m].age = p[m].age*10 + (line[j++]-'0');

        memset(line , '\0', i);
        i = 0;

        /////////////

        while((ch = fgetc(f1)) && ch!='\n')     //line of address
        {
            line[i++] = ch;
        }
        j = 8;
        while(j != i)
            p[m].addres[j-8] = line[j++];

        memset(line , '\0', i);
        i = 0;

        //////////////

        while((ch = fgetc(f1)) && ch!='\n')     //line of serial_number
        {
            line[i++] = ch;
        }
        j = 15;
        p[m].serial_num = 0;
        while(line[j] != ' ' && line[j] != '\0')
            p[m].serial_num = p[m].serial_num*10 + (line[j++]-'0');

        memset(line , '\0', i);
        i = 0;

        //////////////

        while((ch = fgetc(f1)) && ch!='\n' && ch != EOF)        //Line of function
        {
            line[i++] = ch;
        }
        j = 10;
        while(j!=i)
            p[m].function[j-10] = line[j++];

        memset(line , '\0', i);
        i = 0;
    }


//  for (int m = 0; m < n; m++)
//  {
//      printf ("%s *** %d *** %s *** %ld\n", p[m].addres , p[m].age , p[m].function , p[m].serial_num);
//  }

    return 0;
}