Я в основном пытаюсь создать связанный список из текстового файла и добавлять новый член каждый раз, когда слова разные, и увеличивать счетчик, если слова одинаковы (назначение hw). Я думал, что сделал это правильно, но, кажется, он добавляет участника, несмотря ни на что. Мне интересно, неправильно ли я просматриваю список во время поиска? Вот мой код. Есть предположения? Благодаря!Одиночные списки в C
LIST *CreateList(FILE *fp)
{
char input[LINE_LEN];
LIST *root= NULL; /* contains root of list */
size_t strSize;
LIST *newList; /* used to allocate new list members */
int same; /* if string is same */
while (fscanf(fp, BUFFMT"s", input) != EOF) {
strSize = strlen(input) + 1;
if (root == NULL) {
if ((newList = (LIST *)malloc(sizeof(LIST))) == NULL) {
printf("Out of memory...");
exit(EXIT_FAILURE);
}
if ((newList->str = (char *)malloc(sizeof(strSize))) == NULL) {
printf("Not enough memory for %s", input);
exit(EXIT_FAILURE);
}
memcpy(newList->str, input, strSize); /*copy string */
newList->count = START_COUNT;
newList->next = NULL;
root = newList;
}
/* if not root node, add node, or increment count */
else {
same = ListSame(newList, input);
if (same == 1) {
root->count++;
}
else {
if ((newList = (LIST *)malloc(sizeof(LIST))) == NULL) {
printf("Out of memory...");
exit(EXIT_FAILURE);
}
if ((newList->str = (char *)malloc(sizeof(strSize))) == NULL) {
printf("Not enough memory for %s", input);
exit(EXIT_FAILURE);
}
memcpy(newList->str, input, strSize); /*copy string */
newList->count = START_COUNT;
newList->next = root->next;
root->next = newList;
}
}
}
return root;
}
int ListSame(LIST *head, char *input)
{
LIST *start = head;
for (; start != NULL; start = start->next) {
if (strcmp(head->str, input) == 0) {
return 1;
}
}
return 0;
}
ли это с учетом регистра? Попробуйте использовать stricmp(), если нет. – vpram86
ваш код будет легче следовать, если вы использовали «разделение проблем»; то есть извлечь код списка из кода разбора файла ... –
'BUFFMT" s "' выглядит неправильно. 'BUFFMT"% s "' возможно? –