c ++ while循环,使用getline函数

时间:2014-09-07 02:37:10

标签: c++ xml fstream ifstream ofstream

好的,首先因为人们喜欢知道,这是作业......

我正在编写一个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();
}

这不起作用....它只是停留在循环中......有人可以就我可以采取的路线提供建议。我不是要求你完成我的作业......只需要朝着正确的方向轻推

2 个答案:

答案 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();
}