好的,首先因为人们喜欢知道,这是作业......
我正在编写一个C ++程序来将文本文件转换为XML(这不是我需要帮助的地方) 我有这个问题。
我正在编写一个while循环来遍历txt文件中的公司(最多15个),并在每个组的末尾标记为“END_MANAGER_DATA--”。我正在尝试编写一个循环遍历公司的while循环,并在达到-END_MANAGER_DATA--时完成循环。下面是txt文件的示例
19936 WALKER KOLTON PORTLAND TN
HARMAN INTERNATIONAL INDUSTRIES INC
LUCENT TECHNOLOGIES INC
COMPUTER SCIENCES CORP
COMMUNICATIONS CORPORATION
--END_MANAGER_DATA--
这是我试图使用的代码.....
getline(inFile,company);
inFile.ignore();
while(company != "--END_MANAGER_DATA--"|| !inFile.eof())
{
outputfile <<"\t\t\t <company> "<<company << "</company>"<<endl;
getline(inFile,company);
inFile.ignore();
}
这不起作用....它只是停留在循环中......有人可以就我可以采取的路线提供建议。我不是要求你完成我的作业......只需要朝着正确的方向轻推
答案 0 :(得分:2)
读取数据的惯用方法是将readline()
置于while循环的测试条件中,如下所示:
std::string line;
while(std::getline(inFile, line) && line != "--END_MANAGER_DATA--")
{
std::cout << "\t\t\t<company>" << line << "</company>" << '\n';
}
这是有效的,因为while只有在读取该行时没有错误才会继续。对eof()
的测试不起作用,因为eof()
直到读取完成后才会发生,只有在没有错误条件的情况下才会进行读取。
在你的代码中,你ignore()
每行的第一个字符,这就是为什么我认为你永远不能匹配“--END_MANAGER_DATA - ”。
答案 1 :(得分:1)
试试这个:
string company = "";
while(company.compare("--END_MANAGER_DATA--") != 0 && !inFile.eof()) {
getline(inFile, company);
outFile << "\t\t\t <company> "<< company << "</company>" << endl;
inFile.ignore();
}