0

该结构在头文件instance.h中定义,如下所示:

typedef struct instance{
    char *a;
    char *b;
    int c
} Instance;

我有一个函数: 文件 instance.c 中的实例 *get_instance(FILE *fd) 从标准输入读取数据并将其解析为结构实例中的成员 a、b 和 c。

我用:

while (fgets(buffer, sizeof(buffer)-1, fd) != NULL && (nlines != 4)) 

从标准输入读取 4 行并将其解析为 char 数组和一个 int。

来自 stdin 的输入具有以下格式:

instance1 info
instance1 info
instance1 info
instance1 info
instance2 info
instance2 info
instance2 info
instance2 info
... and so on

这就是为什么我只读了 4 行来进行解析。

我在 main.c 中调用这个函数:

Instance *ip;
while ((ip = get_instance(stdin)) != NULL) {
// print info in ip
}

我希望它打印 instance1 信息,然后是 instance2 信息,然后是 instance3 信息,依此类推……

但是,当此时再次调用 get_instance 时,它​​会重复打印出 instance1 信息。

有没有办法让 get_instance 函数“记住”它最后一次读取的位置——即第 4 行——并从第 5 行读取这次?

4

1 回答 1

0

试试这个:在循环 get_instance() 之前先从标准输入获取/保存所有输入。

我的猜测(没有实际的 get_instance() 实现)问题是在 get_instance() 循环中调用 fgets() 循环。而 get_instance() 无法处理。

于 2012-10-19T06:58:18.657 回答