我正在解析文本文件,由于某种原因string::compare()
没有按预期工作。
文字文件:http://pastebin.com/raw.php?i=WZDWmb56
读取函数(从while循环中调用):
string StopName = "***";
bool Person::ReadOnePersonFromFile(ifstream& fin)
{
getline(fin,m_name);
cout << m_name << endl;
if( m_name == StopName )
return false;
fin >> m_id;
fin.ignore(50,'\n');
return true;
}
每当到达"***"
时,if( m_name == StopName )
都不会返回true
。到底是怎么回事?
此功能适用于Windows(Visual Studio)。我目前正在Linux上编译它。这与文本的存储方式有什么关系吗?
答案 0 :(得分:0)
您似乎在代码中比较StopName
而不是Stop
,因此&#34; ***&#34;还没有检查过(假设Stop
和StopName
不是同一件事)。
答案 1 :(得分:0)
找到我的答案。我相信这是因为在Windows上对换行符进行编码的方式。
Windows: \r\n (CR + LF)
Linux: \n
Mac: \r
我必须将我的Windows文本文件转换为带有dos2unix
的Unix文本文件。该程序工作正常。