При чтении из файла, вместо последовательности чисел выдает последовательность восклицательных букв

В си не сильно разбираюсь, не могу понять, читаю файл, всё с 1 строки, потом с другой, создав до этого динамический массив из структур, пытаюсь вывести имена из структур, выдает это:

НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН

И так много букв н, долго просидел, ничего не нашел, пробовал менять кодировки в файле, не помогло, пробовал оставить буквально 1 слово в строке на английском языке, ничего не помогло

Код:

#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#pragma warning(disable:4996)
struct sportsmen {
    char full_name[60];
    float results[6];
};

int main()
{
        
    struct sportsmen *sportsmens;
    sportsmens = (struct sportsmen*)malloc(sizeof(struct sportsmen));
    setlocale(LC_ALL, "rus");
    puts("Толкание ядра");
    char  extension[6] = { ".txt\0" };
    char file_name[40];
    puts("Введите название файла в пределах 30 символов (без указания расширения файла)");
    gets(file_name);
    strcat(file_name, extension);
    printf("Имя файла: %s\n",file_name);
    int what_do = 0; int size = 0;
    FILE* table;
    table = fopen(file_name, "rt");
    if (table == NULL) {
        puts("Не удалось открыть файл");
        fclose(table);
        exit(0);
    }
    while (!feof(table)) {
        if (fgetc(table) == '\n')
            size += 1;
    }
    sportsmens = (struct sportsmen*)malloc(size*sizeof(struct sportsmen));
    
    
    for (int i = 0; i < size + 1;i++) {
        fscanf(table,"%10s |%5.2f|%5.2f|%5.2f|%5.2f|%5.2f|%5.2f|\n",&sportsmens[i].full_name,&sportsmens[i].results[0], &sportsmens[i].results[1], &sportsmens[i].results[2], &sportsmens[i].results[3], &sportsmens[i].results[4], &sportsmens[i].results[5]);
    }
    fclose(table);
    for (int i = 0; i < size+1; i++) {
        printf("%s\n",sportsmens[i].full_name);
    }
}

Содержимое текстового файла

Спортсмен 0 |12.12|11.2|14.2|10.2|11.4|13.5|
Спортсмен 1 |11.12|15.00|12.13|10.9|17.6|18.32|
Спортсмен 2 |19.6|10.2|11.6|18.2|15.6|19.5|
Спортсмен 3 |17.00|15.1|18.1|14.2|11.3|12.85|
Спортсмен 4 |15.2|22.12|14.2|15.7|17.3|14.5|
Спортсмен 5 |17.03|12.3|11.56|12.89|15.21|19.2|
Спортсмен 6 |10.2|9.3|11.2|14.4||12.3|10.2|
Спортсмен 7 |15.18|21.3|12.6|15.2|16.45|13.35|
Спортсмен 8 |11.2|18.23|11.24|16.22|16.31|11.04|
Спортсмен 9 |12.3|15.49|13.61|18.21|15.02|14.23|

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

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

Надо добавить одну строку

while (!feof(table)) {
    if (fgetc(table) == '\n')
        size += 1;
}

fseek(table,0,SEEK_SET);
→ Ссылка