Я создаю «Программу решения Диллемы», в которую пользователь вводит дилемму и добавляет причины PRO и CON.
PRO и CON управляются структурой с именем reasonList, а причины PRO хранятся в структуре proList, а причины CON хранятся в структуре conList следующим образом:
typedef struct reasonList
{
char** reasons;
int numReasons;
}reasonList;
int main(void)
{
reasonList proList;
reasonList conList;
// Rest of code...
}
У меня есть функция, которая инициализирует списки следующим образом:
void initRList(reasonList* list)
{
// Makes an array of strings
list->reasons = (char**)malloc(sizeof(char*));
list->numReasons = 0;
}
и у меня есть функция, которая обновляет каждую новую причину, добавляемую в списки:
void updateRList(reasonList* list, char* newReason)
{
list->reasons = (char**)realloc(list->reasons, sizeof(char*) * (list->numReasons+1));
list->reasons[list->numReasons] = (char*)malloc(sizeof(char) * strlen(newReason));
list->reasons[list->numReasons] = newReason;
list->numReasons++;
}
Моя проблема в том, что каждый раз, когда я запускаю функцию updateRList для добавления причины в список причин, она добавляет причину в конец списка, который я запрашивал, но изменяет все причины (conList и proList) на последнюю причину, которая была вошел тоже.
Пример:
ввод:
Печать списков:
Вот как я отправляю списки и причину функции updateRList:
switch (choice)
{
case ADD_PRO_CHOICE:
printf("Enter a reason to add to list PRO:\n");
fgets(reason, STR_LEN, stdin);
reason[strlen(reason) - 1] = '\0';
updateRList(&proList, reason);
break;
case ADD_CON_CHOICE:
printf("Enter a reason to add to list CON:\n");
fgets(reason, STR_LEN, stdin);
reason[strlen(reason) - 1] = '\0';
updateRList(&conList, reason);
break;
}
Я пытаюсь решить эту проблему уже несколько часов и не могу найти, как это исправить, я был бы рад, если кто-то здесь может помочь:)