3

10個の整数の行がいくつかあるファイルがあります。

これらの整数を、対応する配列の各行の番号を使用して、line1、line2、line3 などの名前の複数の配列にコピーしたいと考えています。

私は現在使用しています

fscanf(items, "%d, %d, %d, %d, %d, %d, %d, %d, %d, %d", &line1[0], &line1[1], &line1[2], &line1[3], &line1[4], &line1[5], &line1[6], &line1[7], &line1[8], &line1[9]);

最初の 10 個の int を line1 という名前の配列に割り当てます。

これは非常にずさんな方法であり、残りの値を他の配列に代入するという別の問題に取り組んでいません。

配列に 10 個の値をより適切に割り当てる方法と、各行を別の配列に割り当てる方法に関する提案をいただければ幸いです。

ありがとう

4

3 に答える 3

5

多次元配列とネストされたループを使用します。

#DEFINE COLS 10
#DEFINE ROWS 10

int i, j;
int line[ROWS][COLS];

for (i = 0; i < ROWS; ++i) {
  for (j = 0; i < COLS - 1; ++j) {
    fscanf(items, "%d, ", &line[i][j]);
  }
  fscanf(items, "%d", &line[i][COLS - 1]);
}

編集:

上記のコードは、質問と同じフォーマット文字列 (カンマ区切り値) を使用しています。スペースで区切られた値が問題ない場合は、fscanf各行の最後の項目を区切らずにストレート ループを使用できます。

#DEFINE COLS 10
#DEFINE ROWS 10

int i, j;
int line[ROWS][COLS];

for (i = 0; i < ROWS; ++i) {
  for (j = 0; i < COLS; ++j) {
    fscanf(items, "%d", &line[i][j]);
  }
}

サイドノート:

入力ファイルのエラーを検出するコードを書きたい場合は、 からの戻り値をチェックする必要がありますfscanf。おそらく学校のプロジェクトでは必要ありませんが、産業用コードでは必要です。

于 2012-11-07T16:26:03.397 に答える
3

行数がわかっている場合、たとえば 100 行の場合は、次のようにすることができます。

int arr[r][c];

for (i=0; i<r; i++) {
    for (j=0; j<c-1; j++) {
        fscanf(file, "%d, ", &arr[i][j]);
    }
    fscanf(file, "%d\n", &arr[i][j]);
}
于 2012-11-07T16:27:05.877 に答える
1

ループを使用する必要があります。

#include <stdio.h>

for (size_t i = 0; i < 9; ++i)
     fscanf("%d, ", &line1[i]);
fscanf("%d", &line[9]);

2 次元配列を使用する方がさらに良いでしょう。

int a[NLINES][NCOLUMNS];

for (size_t i = 0; i < NLINES; ++i) {
   for (size_t j = 0; j < NCOLUMNS - 1; ++j)
        fscanf(fp, "%d, ", &a[i][j]);
   fscanf(fp, "%d\n", &a[i][NCOLUMNS - 1]);
}
于 2012-11-07T16:19:42.933 に答える