Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从文件C初始化结构?_C_File_Pointers_Struct - Fatal编程技术网

如何从文件C初始化结构?

如何从文件C初始化结构?,c,file,pointers,struct,C,File,Pointers,Struct,我有一个txt文件,它是: 我有我的结构: typedef struct _car_s { char destination[50]; int priority; struct _car_s *next; int number_id; }car_s, *p_car_s; typedef struct _station_s { struct _station_s *waiting; char nameofstation[50]; str

我有一个txt文件,它是:

我有我的结构:

typedef struct _car_s
{
    char destination[50];
    int priority;
    struct _car_s *next;
    int number_id;

}car_s, *p_car_s;

typedef struct _station_s
{
    struct _station_s *waiting;
    char nameofstation[50];
    struct _station_s *detached;

}station_s, *p_station_s;
我想利用您的帮助,找出如何从文件中初始化我的车站和汽车,这是一个推荐的功能。 提前感谢,祝你今天愉快

编辑:

我做了一个文件读取功能:

int read_files(char* filename, p_car_s cars, p_station_s station)
{

    FILE* myFile;
    char buff[1024];
    myFile = fopen(filename, "r");
    if(NULL == myFile)
    {
        printf("\n fopen() Error!!!\n");
        return 0;
    }
    while (fgets(buff, 1024, myFile) != NULL)
    {
        handle_line(buff, cars, station);
    }


    if(fclose(myFile) == 0 )
    {
        buff[0]='\0';

    }
}
但我似乎无法思考如何处理函数Handle_行以及如何初始化结构。。
有什么想法吗?

在纯C中,没有将任意数据读入数据结构的
函数

您需要将文件中的每个字节读入数据结构中的每个字节。如果是32位整数,则一次读取4个字节;如果是8字节整数,则一次读取8个字节。除非您知道自己在做什么,否则不要将文件中的结构读入内存中的结构


C语言中有一些库允许您阅读JSON等内容,但这些库对我们用户隐藏了过多的复杂性。

我认为更好的方法是使用fread()一个接一个地读取内容,然后初始化。

您需要编写代码,从文件中读取数据,然后使用read添加的值初始化结构。很好,您正确使用了
fgets()
。现在,您尝试了什么
handle\u line
?请阅读您将知道简短答案为“否”的地方。一般来说,最好在问题中包含示例数据文件的文本,而不是让我们去一些非现场资源查看它。这里有一些重要的细节,例如
#
注释行和被忽略的空行,以及在输入行中使用逗号分隔的值,以及文件中两种类型的数据之间的分隔标记,这些在问题中应该是可见的。你如何识别评论行?你会如何发现一个空的,或全部空白的行?你会如何识别分离标记?哪个代码跟踪你是在读电台还是在读汽车?请注意,
read_files()
中的代码有时返回值,有时不返回值;那太糟糕了。这个名字也用词不当;它读取单个文件,而不是多个文件。在某个时刻,你将面临列表和树的永久问题;如何从被调用的函数中获取数据。除非创建文件读取代码可以附加到的空列表,否则接口将无法工作。小心地使用
sscanf()
解析输入行,尽管逗号空格字段分隔符需要小心。使用
fread()
不是答案。输入文件位于可变长度的文本记录中,其中包含需要忽略的注释行
fread()
是不合适的,除非您的建议是在一个slurp中将整个文件读入一个内存块中(这是用于在一个块中读取文件的术语),而这不是您的建议。