0

所以我在这里有这部分代码

这是循环 5 次 (MAX = 5) 以将单词插入链接列表。

for ( int i = 0 ; i < MAX ; i++ )
{
    string alphabet = G->returnAlphabets();

    L[i]->addWords(alphabet[i]);
}

我在这里有插入词部分

string line;

fstream myfile ("Words.txt");

while (!myfile.eof())
{
    getline(myfile,line);

    if ( alphabet == line[0] )
    {
        ListNode *newNode = new ListNode;

        if ( head == NULL )
        {
            newNode->item = alphabet;           
            newNode->next = NULL;
            head = newNode;
        }

        else
        {
            newNode->item = line;               
            prev = cur;
            prev->next = newNode;
        }

        cur = newNode;
    }
}

myfile.close();

我的问题是它在最后一个循环中给了我错误。MAX = 4 上的含义,插入到节点。循环的其余部分很好。当我将 MAX 减少到 4 意味着它循环 4 次时,程序没有错误,但是当程序循环 5 次时它会出错。

谁能指出我的错误?

编辑:

我检测到在最后一个循环中,它没有转到第一个节点。
而且程序还从文件中得到了这个词,只是在输入第一个节点时它给出了错误

4

1 回答 1

1

使用的逻辑while (!myfile.eof())很糟糕,因为您没有检查是否getline(myfile, line);成功,然后在getline()检测到 EOF 时继续使用该值。你应该使用:

while (getline(myfile, line))
{
    ...rest of loop...
}

如果不仔细检查手册或标准,就不清楚(对我而言)line失败后的状态是什么getline(),但它很容易导致line[0]失败。

既然你说“它在最后一次迭代中失败了”,这可能是你遇到麻烦的主要原因。

于 2013-08-26T04:25:56.220 回答