使用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;
}
相关文章
相关标签/搜索