У меня есть задание, которое просит меня отсканировать файл, в котором много строк, каждая строка содержит одно слово, подобное этому:
sonnets
william
shakespeare
fairest
creatures
...
Мне нужен способ добавить эти слова в массив связанных списки, созданные
LinkedList* data = calloc(50, sizeof(LinkedList));
for (int i = 0; i < 50; i++) {
data[i] = newLinkedList();
}
Я пытался использовать fscanf, но на самом деле буфер не хранит слова, а стирается каждый раз, когда я читаю новую строку. И в итоге в список сохраняется только одно слово:
raw = fopen("./shakespeare-cleaned5.txt", "r");
char* buf = calloc(50, sizeof(char));
int length = 0;
while (fscanf(raw, "%s", buf) == 1) {
length = strlen(buf);
add(data[length], buf);
}
fclose(raw);
Есть ли другой способ сделать это?
Вот части связанного списка ADT:
Node newNode(char* s) {
Node N = malloc(sizeof(NodeObj));
N->number = 1;
N->item = s;
N->next = NULL;
return N;
}
void add(LinkedList L, char* s){
Node N = NULL;
if( L==NULL ){
fprintf(stderr,
"StringList Error: calling add() on NULL StringList reference\n");
exit(EXIT_FAILURE);
}
int index = find(L, s);
if(index == 0){
N = newNode(s);
N->next = L->head;
L->head = N;
(L->numItems)++;
}else{
index--;
N = L->head;
for (int i = 0; i < index; i++) {
N = N->next;
}
N->number++;
}
}
Я также пытался сохранить все слова в массиве, но все, что я получил, - ошибка сегмента.