我有一个代码如下。每当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");
答案 0 :(得分:1)
他们是否使用相同的输入文件?包括Windows换行符? Linux不喜欢windows换行符。 (Windows也不像Linux那样)
在Windows中,每个换行符为\r
后跟\n
。在Linux中,换行符只是 \n
。默认情况下,流在“文本模式”中打开,它将系统换行符转换为\n
。因此,当您在Windows中读取文件时,它正在帮助放弃\r
。但是,Linux没有意识到它是换行符的一部分,因此将\r
放在字符串的末尾就像任何其他普通字符一样,这使得它与硬编码的"$Nodes"
不匹配。
答案 1 :(得分:0)
删除std::cin.ignore();
。您正在等待用户输入。在linux上测试过。