PROG 1.5:ファイルの読み込み

<問題> 10万個のデータのあるファイルdata.txtを、配列dataに格納し、N番目の要素を出力する。例題 0103とは別に、現実的な読み込み方法


実行例:

N? : 9999

data[9999] = 99732



解答例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


#define DATA_SIZE 100000

int main (void) {
   long data[DATA_SIZE];
   long i = 0;
   FILE *fp;
   char buffer[16];  /* 読み込み文字数の最大値指定。このプログラムでは16は大目 */
   long n;

   printf("N ?: ");
   scanf("%ld", &n);

  /* 一旦、全部読み込む。本当は、key番目まででよい */
   fp = fopen("data.txt", "r");
   while (fgets(buffer, sizeof (buffer), fp) != NULL) { /* 読み込めなくなるまで という定番の書き方 */
      sscanf(buffer, "%ld", &data[i]); /* long型整数として、data[i]の値に読み込む */
      i++;
   }
   fclose (fp);

   /* n番目だけをprintf */
   printf("data[%ld] = %ld\n",n, data[n]); /* ずばり、配列n番目の要素を出力 */

   return 0;

}