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

c++ program suddenly stopped writing to file

本文关键字:文件 程序 突然 c++      更新时间:2023-10-16

我几乎没有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(运行mountain lion)上使用g++编译这个

谢谢你的帮助!

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

int a = 0;
std::string previousLine = "";
while(a < 1)
{
    // a needs to be incremented in here or it will loop forever!
}

我解决了我的问题(得到了许多回答我的人的帮助)。

在我最初的问题中,我使用以下代码循环遍历列表:

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

旧代码中的while语句连续为false,因为它检查文件中的每行是否有特定的字符串。循环继续进行的唯一原因是外部while循环从未为假。为了解决这个问题,我更改了外部while循环,以便它检查文件的结束,一旦所有操作完成,循环就结束了。

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