我的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 ++编译它
感谢您的帮助!
答案 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总是非常有用!