1

所以我有一个每次都需要检查的单词列表。我尝试使用以下代码执行此操作:

bool woordenKloppen=true;

//doorloop alle woorden in de array
for (int i=0;i<woordenlijst.size();i++)
{
    m_woordenlijst->open(QIODevice::ReadOnly);
    m_woordenlijst->reset();

    char buffer[1024];
    qint64 lineLength = m_woordenlijst->readLine(buffer, sizeof(buffer));

    //zoek in de woordenlijst zolang het woord niet gevonden is en de woordenlijst niet gedaan is
    while (lineLength!=-1 && woordKlopt==false)
    {
        QString vergelijkWoord=QString(buffer);

        lineLength = m_woordenlijst->readLine(buffer, sizeof(buffer));

        //verwijder de return en newline characters van het woord in de file
        vergelijkWoord.remove(vergelijkWoord.length()-2,2);

        //het woord klopt indien het in de woordenlijst staat
        if (woord==vergelijkWoord)
        {
            woordKlopt=true;
        }
    }
    if (!woordKlopt)
    {
        woordenKloppen=false;
    }

    //sluit de woordenlijst
    m_woordenlijst->close();
}

//return true als alle woorden klopten, anders false
return woordenKloppen;

每次第一次调用该函数时,这似乎都有效。第二次 lineLength 将为-1,他将跳过循环。我错过了什么吗?提前致谢

文本文件看起来像这样,每行只有一个单词:

aalfuiken
aalgeer
aalgeren
aalglad
aalgladde
aalkorf
aalkorven
aalkuip
aalkuipen
aalmoes
aalmoezen
aalmoezenier
aalmoezeniers
aalmoezenierskamer
aalmoezenierskamers
aalpomp
aalpompen
aalput
aalputten
4

3 回答 3

0

我认为这不是正确的方法,但不关闭文件似乎可以解决问题:S

于 2013-08-13T12:38:29.533 回答
0

问题是行尾。在文件中,您的行以 Windows 样式“\r\n”结尾,并且您正在以二进制模式阅读。要修复它正确打开文件的方式:

m_woordenlijst->open(QIODevice::ReadOnly | QIODevice::Text);


题外话:在 qt 中读取文本文件的最佳方法是使用 QTextStream。

于 2013-08-13T13:06:15.803 回答
0

如果无法读取一行但没有发生错误,则此函数返回 0。如果发生错误,此函数返回可读取内容的长度,如果未读取任何内容,则返回 -1。

errorString()告诉你什么?

于 2013-08-13T11:01:12.007 回答