c ++程序突然停止写入文件

时间:2013-05-14 19:21:09

标签: c++ io

我的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 ++编译它

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

似乎问题可能与无限循环有关。

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

while(a < 1)
{
    // a needs to be incremented in here or it will loop forever!
}

答案 1 :(得分: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循环,以便检查文件的结尾,一旦完成所有操作就结束循环。

再次感谢您的回答。 Stack Overflow总是非常有用!