0

構造体は、ヘッダー ファイルinstance.hで次のように定義されます。

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

関数があります: ファイル instance.c のInstance *get_instance(FILE *fd) は、stdin からデータを読み取り、構造体インスタンスのメンバー a、b、および c に解析します。

私が使う:

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

stdin から 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() をループする前に、最初に stdin からすべての入力を取得/保存します。

私の推測では (実際の get_instance() 実装なしで)、問題は get_instance() ループ内で fgets() ループを呼び出すことです。get_instance() はそれを処理できません。

于 2012-10-19T06:58:18.657 に答える