Почему значения в arr такие при втором выводе?

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include <stdio.h>
#include <locale.h>
#include <crtdbg.h>
#include <corecrt_malloc.h>
#include <string.h>
#include <stdlib.h>

struct Client {
    char NLP[100];
    char num[10];
    char startDate[10];
    char endDate[10];
    int maxDebt;
    int currDebt;
};

int main()
{
    setlocale(LC_ALL, "Russian");
    
    Client *arr = (Client*)malloc(sizeof(Client) * 10);

    FILE* param, * clients;

    int debt = 0, k = 0, c = 0, forStruct = 0;
    char conv[5], *buf, str[100], *point, del[] = ",\n", hold[10];

    if((clients = fopen("./Clients.txt", "r")) == NULL) return -1;
    if((param = fopen("./Param.ini", "w")) == NULL) return -1;

    printf("Enter the debt value: ");
    scanf_s("%d", &debt);

    sprintf(conv, "%d", debt);

    printf("%s\n", conv);

    fputs(conv, param);

    while (!feof(clients)) {
        buf = fgets(str, 100, clients);
        point = strtok(str, del);
        while (point != NULL) {
            if (k == 0) {
                strcpy(arr[c].NLP, point);
                k++;
                printf("%s\n", arr[c].NLP);
            }
            else if (k == 1) {
                strcpy(arr[c].num, point);
                k++;
                printf("%s\n", arr[c].num);
            }
            else if (k == 2) {
                strcpy(arr[c].startDate, point);
                k++;
                printf("%s\n", arr[c].startDate);
            }
            else if (k == 3) {
                strcpy(arr[c].endDate, point);
                k++;
                printf("%s\n", arr[c].endDate);
            }
            else if (k == 4) {
                strcpy(hold, point);
                forStruct = strtoul(hold, NULL, 0);
                arr[c].maxDebt = forStruct;
                k++;
                printf("%d\n", arr[c].maxDebt);
            }
            else if (k == 5) {
                strcpy(hold, point);
                forStruct = strtoul(hold, NULL, 0);
                arr[c].currDebt = forStruct;
                k++;
                printf("%d\n", arr[c].currDebt);
            }
            
            point = strtok(NULL, del);
        }
        k = 0;
    }

    while (arr) {
        if (k == 6) break;
        printf("%s,%s,%s,%s, %d, %d\n", arr[k].NLP, arr[k].num, arr[k].startDate, arr[k].endDate, arr[k].maxDebt, arr[k].currDebt);
        k++;
    }

    free(arr);

    fclose(param);
    fclose(clients);
}

файл clients:

Морозов Иван Ильич, 9383599726, 26.07.2012, 22.08.2013, 0, 70
Соколов Степан Андреевич, 9828056928, 10.07.2012, 11.01.2013, 170, 180
Фетисова София Васильевна, 9119191154, 27.07.2013, 06.02.2014, 247, 400
Малышева Фатима Артуровна, 9223678067, 07.11.2010, 04.05.2012, 102, 0
Григорьева Вероника Дмитриевна, 9748589837, 22.08.2013, 22.08.2015, 0, 50
Степанов Лев Всеволодович, 9834148934, 13.09.2010, 31.10.2011, 186, 50
Кузнецова Анастасия Александровна, 9945334278, 06.12.2013, 06.02.2014, 0, 0
Пастухова Маргарита Фёдоровна, 9441655763, 25.02.2012, 19.08.2012, 0, 10
Сергеев Мартин Янович, 9385769920, 19.07.2010, 19.11.2010, 0, 60
Шилова Алиса Фёдоровна, 9924775470, 04.01.2011, 20.11.2012, 0, 0

я ожидал, что выводимые во второй раз значения будут как в первом while, но они явно не такие. В чем проблема?


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