Проблема с записями в файл

Мне нужно, чтобы содержимое одного файла (в нем 37 записей) раскидать по sqrt(37) файлам (с округлением в большую сторону). Собственно, в чем проблема: мой код не делает последнюю запись в 7 файл (Он его даже не создает). Подскажите, что мне поправить. Заранее благодарен.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(void) {
    FILE* fp;
    FILE* fp2;
    int n, count; // n - количество записей в файле, count- количество файлов
    char buffer[3];
    char name[80] = "TMP";
    double tmp1, tmp2, tmp3;


    if ((fp = fopen("Data.txt", "r")) == NULL) {
        printf("File not opened\n");
        _getch();
        exit(EXIT_FAILURE);
    }
    else
        printf("File opened\n");

    fscanf(fp, "%d", &n);
    count = sqrt(n);
    printf("%d", count);

    for (int i = 0; i < count; i++) {
        name[3] = 0;
        _itoa(i + 1, buffer, 10);
        strcat(name, buffer);
        strcat(name, ".txt");
        if ((fp2 = fopen(name, "w")) == NULL) {
            printf("File fp2 not opened\n");
            _getch();
            exit(EXIT_FAILURE);
        }
        for (int j = 0; j < n / count; j++) {
            fscanf(fp, "%lf %lf %lf", &tmp1, &tmp2, &tmp3);
            fprintf(fp2, "%lf %lf %lf\n", tmp1, tmp2, tmp3);
        }
        fclose(fp2);
    }

    _getch();

    return 0;
}

Ответы (2 шт):

Автор решения: Harry

Говорите, n == 37?

Тогда

count = sqrt(n); 

дает 6;

for (int i = 0; i < count; i++) {

выполняется 6 раз - 0, 1, ..., 5.

О каком седьмом файле вы говорите?

→ Ссылка
Автор решения: Руслан Мамедов

Прошу простить меня за непонятный вопрос. В следующий раз буду внимательнее.

Это лишь часть всей задачи, которую мне надо решить. В ней нужно раскидать n записей по sqrt(n) файлам, затем отсортировать их в каждом файле и далее слить все воедино. О первой части задачи я и спросил Вас. Но, к счастью, через некоторое время это пришло мне в голову. Может кому-то оно пригодится.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(void) {
    FILE* fp;             // указатель на файл с которого будет считывать
    FILE* fp2;           // указатель на второй файл, в который будем записывать
    int n, k = 0;       // n - первая строка в fp, в ней содержится количество записей в файле
                        // k -  переменная- ограничитель для последнего файла
    char buffer[3];      // переменная для хранения цифры, которую мы превратим в строку
    char name[80] = "TMP"; // скелет для создаваемых файлов
    double tmp;              
    int files, lines, columns;  // количество файлов, строк и столбцов

    if ((fp = fopen("Data.txt", "r")) == NULL) {
        printf("File not opened\n");
        _getch();
        exit(EXIT_FAILURE);
    }
    else
        printf("File opened\n");

    fscanf(fp, "%d", &n);
    files = ceil(sqrt(n));
    lines = ceil(n / (ceil(sqrt(n))));
    columns = 3;      // в файле записи идут по 3 столбца

    for (int i = 0; i < files; i++) {     // отвечает за создание файлов
        name[3] = 0;
        _itoa(i + 1, buffer, 10);
        strcat(name, buffer);
        strcat(name, ".txt");
        if ((fp2 = fopen(name, "w")) == NULL) {
            printf("File fp2 not opened\n");
            _getch();
            exit(EXIT_FAILURE);
        }
        for (int j = 0; j < lines; j++) {   // отвечает за строки в файле 
            while (k < columns) {           // отвечает за столбцы в файле
                if (fscanf(fp, "%lf", &tmp) == EOF)
                    break;
                fprintf(fp2, "%.1lf ", tmp);
                k++;
            }
            fprintf(fp2, "\n");
            k = 0;

        }
        fclose(fp2);
    }
    fclose(fp);
    printf(" P r e s s  a n y  k e y . . .");
    _getch();

    return 0;
}

→ Ссылка