繁体   English   中英

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

[英]c++ while loops, using getline function

好吧,因为人们喜欢知道,这是家庭作业。

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

这是行不通的。。。它只是停留在循环中。。。有人可以提供有关我可以走的路线的建议吗? 我不是要你完成我的作业....只需要朝正确的方向轻推

读取数据的惯用方式是将std::getline()放入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--”。

尝试这个:

string company = "";
while(company.compare("--END_MANAGER_DATA--") != 0 && !inFile.eof()) {
    getline(inFile, company);
    outFile << "\t\t\t <company> "<< company << "</company>" << endl;
    inFile.ignore();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM