字符串的比较不起作用

时间:2013-01-10 20:50:46

标签: c++ comparison stdstring

我有一个代码如下。每当temps = $Nodes循环结束时。我在迭代中检查temps并按预期看到temps = $Nodes一次,但循环没有结束。此代码适用于VS10但不适用于Linux。有什么想法吗?

std::string temps;
s_mesh_file.open (mesh_file.c_str());

do
{
    getline (s_mesh_file, temps);
    std::cout << "temps: " << temps << std::endl;
    std::cin.ignore();
}
while (temps != "$Nodes");

2 个答案:

答案 0 :(得分:1)

他们是否使用相同的输入文件?包括Windows换行符? Linux不喜欢windows换行符。 (Windows也不像Linux那样)

在Windows中,每个换行符为\r后跟\n。在Linux中,换行符只是 \n。默认情况下,流在“文本模式”中打开,它将系统换行符转换为\n。因此,当您在Windows中读取文件时,它正在帮助放弃\r。但是,Linux没有意识到它是换行符的一部分,因此将\r放在字符串的末尾就像任何其他普通字符一样,这​​使得它与硬编码的"$Nodes"不匹配。

答案 1 :(得分:0)

删除std::cin.ignore();。您正在等待用户输入。在linux上测试过。