Arrays 从txt文件读入结构

Arrays 从txt文件读入结构,arrays,c,string,struct,Arrays,C,String,Struct,尝试从txt文件中读取一个分号,并将其存储到结构内部的数组中 struct Total { char *Name; int *No; }MyCities; 这是我的结构,使数组指针,以便我可以分配内存以后。取决于txt的内容。每一行都是结构的一个条目 London;15 Oslo;12 vienna;35 假设这是txt文件的内容,它会将城市名称读入MyCities。名称和分号后的数字读入MyCities。否 FILE *fp; char line;

尝试从txt文件中读取一个分号,并将其存储到结构内部的数组中

struct Total
{
    char *Name;
    int *No;
}MyCities;
这是我的结构,使数组指针,以便我可以分配内存以后。取决于txt的内容。每一行都是结构的一个条目

London;15
Oslo;12
vienna;35
假设这是txt文件的内容,它会将城市名称读入MyCities。名称和分号后的数字读入MyCities。否

    FILE *fp;
    
    char line;
    

    fp = fopen("City.txt", "r");

    for (line= getc(fp); line!= EOF; line= getc(fp)) //for getting number of lines
    {
        if (line == '\n')
            count++;
    }//this is for counting how many lines in txt

    MyCities.No = malloc( count * sizeof *MyCities.No );
    if (MyCities.No == NULL) {
        fprintf(stderr, "Malloc failed.\n");
        exit(1);
    }
    MyCities.Name = malloc( count * sizeof *MyCities.Name );
    if (MyCities.Name == NULL) {
        fprintf(stderr, "Malloc failed.\n");
        exit(1);
    }

因此,在这一点上,我不知道应该如何继续。

您需要以不同的方式编写结构。请记住,整数是
int
,而字符串是
char*
,即指针本身。因此,您可能需要在结构中存储
int No
char*Name
,并存储此类结构的数组(可以像您尝试的那样存储单独的数字数组[
int*
]和名称数组[
char**
),但我不建议这样做)

现在,假设您选择了正确的方法,并且有一个包含数字和字符串字段的struct
City
,正如您所知道的行计数(有一些方法可以避免该过程,但它们更复杂),您可以继续并分配一个
City
数组,例如使用
calloc(count,sizeof(City))
(它进行乘法运算,并且零填充数组)


现在,您可以一行一行地再次读取文件(不要忘记或重新打开它)。应该适合读取第一个字段,并且适用于其他所有内容。

for(line=getc(fp);line!=EOF;line=getc(fp))
通常在((line=getc(fp))!=EOF)时编写,但将名称
用于单个字符是非常罕见的。您当前的代码是错误的…您不能像这样存储多个城市名称。您不想要一个结构数组,即一个结构就是一个城市吗?使用
fgets
从文件中获取一行,然后
strtok
将其分解为多个部分。值得n当然……我忘了有一个操作系统即使在真正有用的地方也会忽略POSIX