Как читать блоки чисел из текстового файла в C

У меня есть файл numbers.dat, содержащий около 300 чисел (с плавающей точкой, отрицательный положительный) в формате столбца. objective состоит в том, чтобы сначала заполнить numbers.dat с 300 номерами, а затем извлечь 100 номеров каждый раз в другой файл, скажем n1.dat. Второй файл n2.dat будет иметь следующие 100 номеров из numbers.dat и т. Д. Для 3 подмножеств файлов, полученных из number.dat. Я не могу понять, как учитывается местоположение последнего прочитанного 100-го номера, так что чтение и выборка файла для следующего блока происходит после номера, который был выбран ранее.

Попытка решения, предоставленного Gunner:

FILE *fp = fopen("numbers.dat","r"); FILE *outFile1,*outFile2,*outFile3; int index=100; char anum[100]; while( fscanf(fp,"%s",anum) == 1 ) { if(index==100) { // select proper output file based on index. fprintf(outFile1,"%s",anum); index++; } if(index >101) { fprintf(outFile2,"%s",anum); index++; } } 

Проблема заключается в том, что записывается только одна информация. Каким должен быть правильный процесс?

Я бы написал программу для

 читать данные из входного файла по очереди
 сохранить количество строк
 на основе текущего количества строк копирует строку в определенный выходной файл

что-то вроде этого

 #include  #include  #define INPUTFILENAME "numbers.dat" #define MAXLINELEN 1000 #define NFILES 3 #define LINESPERFILE 100 #define OUTPUTFILENAMETEMPLATE "n%d.dat" /* n1.dat, n2.dat, ... */ int main(void) { FILE *in, *out = NULL; char line[MAXLINELEN]; int linecount = 0; in = fopen(INPUTFILENAME, "r"); if (!in) { perror("open input file"); exit(EXIT_FAILURE); } do { if (fgets(line, sizeof line, in)) { if (linecount % LINESPERFILE == 0) { char outname[100]; if (out) fclose(out); sprintf(outname, OUTPUTFILENAMETEMPLATE, 1 + linecount / LINESPERFILE); out = fopen(outname, "w"); if (!out) { perror("create output file"); exit(EXIT_FAILURE); } } fputs(line, out); linecount++; } else break; } while (linecount < NFILES * LINESPERFILE); fclose(in); if (out) fclose(out); return 0; } 

Продолжайте читать с number.dat и записывайте в соответствующий выходной файл на основе индекса текущего текущего числа.

Образец кода.

 FILE *fp = fopen("numbers.dat","r"); FILE *outFile; int index=0; char anum[100]; // since we are not calculating, we can store numbers as string while( fscanf(fp,"%s",anum) == 1 ) { // select proper output file based on index. fprintf(outFile,"%s",anum); index++; }