0

回答ありがとうございますが、今まで私のコードはファイルから読み取り、領域の値を出力することができました! 私の質問は、「FOR LOOP」の外でこれらの値を使用する方法です。値が必要なときはいつでもファイルを読み続けたくないので、配列data [] []にファイルのすべての内容が含まれていると仮定します........ループとそのプリントの外側で配列を呼び出すことは可能ですかすべてのファイルの内容を終了しますか?

//file
S (20,22)(129,37)
S (10,18)(40,200)
S (10,20)(39,15)
S (30,400)(750,200)
S (160,70)(240,20)
S (40,40)(10,39)
S (6,65)(94,2)
S (404,40)(110,39)
S (86,61)(50,19)

  //part of code.........

      int count=1;   

       for (i=0; i <= count; i++)
       {
         while(fscanf(file, "S (%d,%d)(%d,%d)\n", &a, &b, &c, &d) !=EOF)
         {

 data[i][0] =a;
 data[i][1] =b;
 data[i][2] =c;
 data[i][3] =d;

 printf("%d,%d,%d,%d\n",data[i][0], data[i][1], data[i][2], data[i][3]);
  XDrawLine(display_ptr, win, gc_grey,a, b, c, d);

    count++;
   }

 // want to call the array data[i][j] here outside the iteration above..
  int j1=0;  
       for (i=0; i <= 19, j1<=3; i++) {
        printf("%d\n",data[i][0]);

        } 
4

1 に答える 1

1

iループ内でインクリメントすることはありません。さらに、外側のループは何もしません。

代わりに次のようにしてみてください。

int i;

for (i = 0; fscanf(...) != EOF; ++i)
{
    // if i == current array size of data, reallocate or break

    data[i][0] = a;
    data[i][1] = b;
    data[i][2] = c;
    data[i][3] = d;

    // etc.
}

// Now data[k] holds data for k in [0, i)

配列要素よりも多くの行がファイルにある場合に何が起こるかを考える必要があります。(配列が動的な場合) 再割り当てするか、ファイルをチャンクで処理する別のループ内に構造全体をラップすることができます。fscanfまた、操作がすべてのデータの抽出に成功するかどうかも確認する必要があります。

于 2012-09-25T11:37:10.127 に答える