1

编辑,好吧。所以,我的代码目前大部分都在工作。我知道它缺少一些应该拼写错误的单词。不过不知道为什么。

http://pastebin.com/DSNU16Bf

此链接包含指向我的文件的所有其他链接。因为,我一次只能发布两个链接。

如果您阅读文件。你会看到这一切是如何运作的。我的搜索是超级贫民区,我知道。如果它以不同的字母开头,我想不出一种忽略链表的方法,我所做的一切都会造成无限循环。不过,这可以编译和工作。

它没有收集所有的俚语。

4

1 回答 1

2

这是我的批评

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);

我们到了这一点(27 个中的 1 个,一行最多 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;
}
于 2013-02-16T06:58:02.653 回答