// 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; }