1

我几乎没有 C++ 编程经验,我编写了一个快速程序来在长链接列表中查找链接组。

过去 2 天我一直在使用这个程序,它运行良好(我猜效率低下,但它有效)。但突然它停止写入文件。我创建了一个新文件并更改了程序中的文件名以检查是否损坏,但它仍然无法正常工作。我也有一个相同的程序通过单独的链接列表搜索,并且该程序仍在工作。

这是代码: 我已经让程序通过使用 while 循环而不是 for 循环检查字符串来写入文件

#include <iostream>
#include <fstream>
#include <string>


int main()
{
    std::string STRING;
    std::string findString;
    std::string line;
    std::ifstream infile;

    std::cout<<"Find String: ";
    std::getline(std::cin, findString, '\n');

    infile.open("old.rtf");
    std::ofstream returnFile("return.txt");

    int a = 0;
    std::string previousLine = "";

    while(a < 1)
    {
        std::getline(infile, STRING);
        while(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
        {
                    previousLine = STRING;
                    returnFile<<STRING<<"\n";
                    std::cout<<STRING<<std::endl;
        }
    }
    infile.close();
    std::system("pause");
    return 0;
}

我在 Mac 上使用 g++ 编译它(运行山狮)

谢谢你的帮助!

4

2 回答 2

1

看来这个问题可能与无限循环有关。

int a = 0;
std::string previousLine = "";

while(a < 1)
{
    // a needs to be incremented in here or it will loop forever!
}
于 2013-05-14T19:28:33.750 回答
0

我解决了我的问题(在回答的人的帮助下!)。

在我原来的问题中,我使用以下代码循环列表:

while(a < 1)
{
    std::getline(infile, STRING);
    if(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
    {
        previousLine = STRING;
        returnFile<<STRING<<'\n';
        std::cout<<STRING<<std::endl;
    }
}

通过将内部 if 语句更改为 while 语句,我能够让程序写入文件。这是下面。

while(a < 1)
{
    std::getline(infile, STRING);
    while(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
    {
                previousLine = STRING;
                returnFile<<STRING<<"\n";
                std::cout<<STRING<<std::endl;
    }
}

为了解决出现的下一个问题(无限循环),我再次将代码更改为:

while(!infile.eof())
    {
        std::getline(infile, STRING);
        if(STRING != previousLine &&  STRING.find(findString) != std::string::npos)
        {
            previousLine = STRING;
            returnFile<<STRING<<"\n";
            std::cout<<STRING<<std::endl;
        }
}

旧代码中的 inside while 语句一直是错误的,因为它正在检查文件中的每一行是否有特定的字符串。循环继续进行的唯一原因是外部 while 循环永远不会为假。为了解决这个问题,我更改了外部 while 循环,以便它检查文件的结尾,一旦一切完成,循环就结束了。

再次感谢您的回答。Stack Overflow 总是很有帮助的!

于 2013-05-14T20:15:20.043 回答