3

スコアを読み取って配列に保存する方法を理解しようとしています。しばらく試していましたが、明らかにうまくいきませんでした。助けてください。

//ID    scores1 and 2
2000    62  40
3199    92  97
4012    75  65
6547    89  81
1017    95  95//.txtfile


int readresults (FILE* results , int* studID , int* score1 , int* score2);

{
// Local Declarations
int *studID[];
int *score1[];
int *score2[];

// Statements
check = fscanf(results , "%d%d%d",*studID[],score1[],score2[]);
if (check == EOF)
    return 0;
else if (check !=3)
    {
        printf("\aError reading data\n");
        return 0;
    } // if
else
    return 1;
4

2 に答える 2

2

その関数を 1 回だけ呼び出して、すべての生徒のスコアを読み取らせたい場合は、次のように使用する必要があります。

int i=0;
check = fscanf(results , "%d %d %d",&id[i],&score1[i],&score2[i]);
while(check!=EOF){
        i++;
        check = fscanf(results , "%d %d %d",&id[i],&score1[i],&score2[i]);
    }
于 2012-12-10T01:03:43.140 に答える
2
  • 変数は、パラメーター リストで 1 回、「ローカル宣言」で 1 回、2 回宣言します。

  • 関数ブレースが閉じていません。

  • fscanfフォーマット文字列で指定された数の項目のみを読み取ることができます。この場合は 3 ( )"%d%d%d"です。配列ではなく数値を読み取ります。配列を埋めるには、ループ ( while、またはfor) が必要です。

編集

さて、これを行う1つの方法は次のとおりです。

#define MAX 50
#include <stdio.h>

int readresults(FILE *results, int *studID, int *score1, int *score2) {
  int i, items;
  for (i = 0;
      i < MAX && (items = fscanf(results, "%d%d%d", studID + i, score1 + i, score2 + i)) != EOF;
      i++) {
    if (items != 3) {
      fprintf(stderr, "Error reading data\n");
      return -1; // convention: non-0 is error
    }
  }
  return 0; // convention: 0 is okay
}

int main() {
  FILE *f = fopen("a.txt", "r");
  int studID[MAX];
  int score1[MAX];
  int score2[MAX];
  readresults(f, studID, score1, score2);
}
于 2012-12-10T00:38:20.097 に答える