Вот моя критика
bool load(const char* dictionary){
// TODO
FILE *dict = fopen(dictionary, "r");
if(opened){
fclose(dict);
return false;
}
Не знаю, где opened
происходят из - думаю, вы открыли файл, прежде чем руки, и, следовательно, мы не знаем, если указатель файла находится в начале, конце, или где-то в средний
opened = true;
if(dict == NULL || !dict){
return false;
}
Почему !dict
?
char line[LENGTH];
bool filling;
for(int i = 0; i < LLLength; i++){
struct dict_node *newNode;
newNode = malloc(sizeof(dict_node));
wordArr[i] = newNode;
start[i] = wordArr[i];
}
Итак, здесь вы строите 27 узлов. Это более простой вариант (то же)
for(int i = 0; i < LLLength; i++){
struct dict_node *newNode;
start[i] = malloc(sizeof(dict_node));
}
Затем позволяет прочитать файл
while(!feof(dict)){
for(int i = 0; i < LLLength; i++){
filling = true;
while(filling)
fgets(line,LENGTH,dict);
мы дойдем до этой точки (1 из 27 и линии не более 45 символов)
Так что давайте поместим его в этот массив. start[i]
или wordArrd[i]
что вы предпочитаете
Поскольку мы не знаем, если wordArr[i]->word
является массивом символов или просто указатель - Я не могу помочь вам здесь
strcpy(wordArr[i]->word,line);
prev = wordArr[i];
Теперь мы запутались. Вы начали с массива, но шизофрения установлена - нам нужен связанный список.
wordArr[i]->next = malloc(sizeof(dict_node));
wordArr[i] = wordArr[i]->next;
fgets(line,LENGTH,dict);
strcpy(wordArr[i]->word,line);
}
}
...
fclose(dict);
for(int i = 0; i < LLLength; i++){
wordArr[i] = start[i];
while(wordArr[i]->next != NULL){
wordArr[i] = wordArr[i]->next;
count++;
}
}
int test = 0;
wordArr[test] = start[test];
while(wordArr[test]->next != NULL){
printf("%s",wordArr[test]->word);
wordArr[test] = wordArr[test]->next;
}
return true;
}
Пожалуйста, пост ** ** маленький образец вашего входного файла, несколько десятков строк должно быть достаточно, так долго, как формат соответствует. Благодарю. Примечание: опубликуйте его ** в добавлении к вашему вопросу; НЕ здесь в комментарии. ** Кроме того, определение «LENGTH» может вступить в игру здесь, поэтому, пожалуйста, включите это в свой источник. – WhozCraig
Весь файл - это одно слово, за которым следует новая строка. Никаких случайных пустых строк или лишних пробелов или чего-либо или вида. Ничего, что влияет на переход. Я просто не могу обернуть голову вокруг кода, необходимого для перехода на следующий узел. Я попытался: if (strncmp (str1, str2,1)! = 0) { i ++ } И многие аналогичные попытки использования prev = wordArr [0], а затем сравнение предыдущей строки. Но он просто не работал, как я. – haincha
Ваш код даже не компилируется «if (открыт) {« откуда происходит 'открытие? и вы говорите, что вы студент из Гарварда? –