0

ファイルを読み込んで fscanf を使用していくつかの値を取得し、配列に格納しようとしていますが、ファイルには「#」で始まる行がいくつかあります (例: #これは単なるコマンドです)。スキップしたい# を含む行は、ランダムな行に表示されます。コードの一部をここに示します。

//do line counts of how many lines contain parameters 


while(!EOF) {
      fgets(lines, 90, hi->agentFile);
      count++;
      if (lines[0] == '#') {
          count--;
      }
  }
   //mallocing an array of struct.
  agentInfo* array = malloc(count*sizeof(agentInfo));
  for (i = 0; i < count; i++) {
      fscanf(hi->agentFile,"%d %d %c %s %c",&array[i].r,&array[i].c,
              &array[i].agent_name,&array[i].function[80],
              &array[i].func_par);

「#」で始まる行をスキップできるように、何かを追加する必要があります。

4

1 に答える 1

3

EOF テストが間違っています。fgets()また、ループとループの間でファイルを巻き戻す必要がありfscanf()ます。そして、ループをデータの読み取りに使用fscanf()する 2 番目のループに置き換える必要があります。または、ファイルを一度読み込んでいる間にメモリを割り当てる必要があります。ただし、それは後で説明します。fgets()sscanf()

while(fgets(lines, sizeof(lines), hi->agentFile) != EOF)
{
      if (lines[0] != '#')
          count++;
}
agentInfo *array = malloc(count*sizeof(agentInfo));
if (array != 0)
{
    int i;
    rewind(hi->agentFile);
    for (i = 0; fgets(lines, sizeof(lines), hi->agentFile) != EOF && i < count; i++)
    {
        if (lines[0] != '#')
        {
            if (sscanf(lines, "%d %d %c %s %c",&array[i].r,&array[i].c,
                     &array[i].agent_name,&array[i].function[80],
                     &array[i].func_par) != 5)
                ...format error in non-comment line...
        }
    }
    assert(i == count);  // else someone changed the file, or ...
}

これは、メモリ割り当てエラーと非コメント行のフォーマット エラーをチェックすることに注意してください。

于 2013-09-20T15:56:47.720 に答える