使用fseek()函數隨機訪問文件

// randomfile.c -- 使用fseek()函數隨機訪問文件
#include <stdio.h>
#include <stdlib.h>
#define MAX 50

int main(void){
  FILE *fp;
  int data, count, array[MAX];
  long offset;
  
  // 爲數組各元素賦值
  for(count = 0; count < MAX; count++)
    array[count] = count * 10;
  
  // 以寫入模式打開二進制文件
  if((fp = fopen("RANDOM.DAT", "wb")) == NULL){
    fprintf(stderr, "Error opening file.");
    exit(1);
  } 
  
  // 將數組寫入文件,而後關閉文件
   if((fwrite(array, sizeof(int), MAX, fp)) != MAX){
     fprintf(stderr, "Error writing data to file.");
     exit(1);
   }
   fclose(fp);
   
   // 以二進制模式打開文件
   if((fp = fopen("RANDOM.DAT", "rb")) == NULL){
     fprintf(stderr, "Error opening file.");
     exit(1);
   }
   
   /*詢問用戶但願讀取哪個元素。
     輸入該元素並顯示它,用戶輸入-1時退出程序*/
    while(1){
      printf("\nEnter element to read, 0-%d, -1 to quit: ", MAX-1);
      scanf("%ld", &offset);
      
      if(offset < 0)
        break;
      else if(offset > MAX-1)
        continue;
      
      //將位置指示符移至制定元素
      if((fseek(fp, (offset * sizeof(int)), SEEK_SET)) != 0){
        fprintf(stderr, "Error using fseek().");
        exit(1);
      }
      fread(&data, sizeof(int), 1, fp);
      printf("\nElement %ld has value %d.", offset, data);
  }
  fclose(fp);
  return 0;
}
相關文章
相關標籤/搜索