При чтении из файла, вместо последовательности чисел выдает последовательность восклицательных букв
В си не сильно разбираюсь, не могу понять, читаю файл, всё с 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);