![](/img/trans.png)
[英]Ignoring the first character while using getline function for inputs in c++
[英]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.