Конкретный элемент структуры массива не сохраняется - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь отсканировать людей firstName lastName и номер из файла в массив структур. Когда я сохраняю данные в массив, каждый элемент работает нормально, за исключением Темп [1] .lastName * * тысяча одна

Я не понимаю, почему он отказывается вставить фамилию в этот элемент массива, любой совет <</p>

Это структура

typedef struct
{
    char firstName [20];
    char lastName [20];
    int numbers[6];
}KBLottoPlayer;

Здесь я объявляю переменный размер

int i,size;
FILE *in = fopen("KnightsBall.in","r");
    fscanf(in,"%d",&size);

Это моя функция для хранения информации из файла в массиве

KBLottoPlayer* readArray(FILE* in, int size)
{

    KBLottoPlayer* temp;
    temp =(KBLottoPlayer*)malloc(sizeof(KBLottoPlayer));

    int i;
    if((in = fopen("KnightsBall.in", "r")) != NULL )
    {
        char buffer[100];
        fgets(buffer, 5, in);
        for(i=0;i<size;i++)
        {
           fscanf(in,"%s ", temp[i].firstName);
           fscanf(in,"%s ", temp[i].lastName);
           fscanf(in,"%d %d %d %d %d %d ", &temp[i].numbers[0], &temp[i].numbers[1], &temp[i].numbers[2], &temp[i].numbers[3], &temp[i].numbers[4], &temp[i].numbers[5]);
           printf("%s %s %d %d %d %d %d %d\n ",temp[i].firstName, temp[i].lastName, temp[i].numbers[0], temp[i].numbers[1], temp[i].numbers[2], temp[i].numbers[3], temp[i].numbers[4], temp[i].numbers[5]);
        }
    }
    else
    {
        printf("File is Not Exist.\n");
    }

return temp;
}

Это входной файл:

10
Llewellyn Mark
1 15 19 26 33 46
Ethan Willingham
17 19 33 34 46 47
Cazalas Jonathan
1 4 9 16 25 36
Siu Max
17 19 34 46 47 48
Balci Murat
5 10 17 19 34 47
Young Bryan
1 2 3 4 5 6
Anna Farach
1 3 5 7 9 10
Justin Mills
2 4 5 6 7 8
Tony Rose
1 3 4 5 6 7
Jess Jones
3 4 5 6 7 8

Я ожидаю, что вывод будет точным списком, кроме 10, но все печатается как обычно, кроме lastName Willingham.

Фактический объем производства:

Llewellyn Mark 1 15 19 26 33 46
Ethan  17 19 33 34 46 47
Cazalas Jonathan 1 4 9 16 25 36
Siu Max 17 19 34 46 47 48
Balci Murat 5 10 17 19 34 47
Young Bryan 1 2 3 4 5 6
Anna Farach 1 3 5 7 9 10
Justin Mills 2 4 5 6 7 8
Tony Rose 1 3 4 5 6 7
Jess Jones 3 4 5 6 7 8

Нажмите любую клавишу для продолжения. , .

1 Ответ

0 голосов
/ 24 января 2019

Вам нужно выделить достаточно места для количества структур, которые вы хотите прочитать. В настоящее время вы выделяете только один элемент:

temp = (KBLottoPlayer*)malloc(sizeof(KBLottoPlayer));

но вы должны выделить для size элементов, чтобы избежать выписывания за пределы:

temp = (KBLottoPlayer*)malloc(sizeof(KBLottoPlayer) * size);

в противном случае вы наблюдаете неопределенное поведение.

...