我注意到有些问题类似,但我找不到合适的答案。
我想比较两个字符串 - 首先由用户给出,第二个用外部.txt文件写。我几乎不会注意到这个问题,因为Windows下的一切正常,中的条件对于某些特定值是真的,但是在Linux中它不是' t(它正在编译,但没有给出正确的结果)。我想也许 cin 在Linux下添加一些额外的字符(比如 \ n 等),但两个字符串上的 size()是相同的值,应该是。
我应该改变什么?
string firststr, secondstr;
fstream dFile;
dFile.open("dfile.txt", ios::in);
if(dFile.good())
{
while (!dFile.eof())
{
dFile >> secondstr; //string from file
}
cin >> firststr;
if(firststr==secondstr) cout <<"OK!";
OK! 显示在Windows 下,而不是在Linux下。
我还使用了getline(cin,firststr)
- 没有成功。
我需要在Windows(我已经拥有)和Linux下运行代码。
我希望这两个字符串都是某些类的成员并不能改变任何东西。
提前感谢任何解决方案。
答案 0 :(得分:1)
如果您将文件从Windows计算机复制到Linux计算机,该文件可能包含CR + LF字符,在Linux上使用该文件时会出现问题。
说文件的内容是:
abcd<CR><LF>
在Windows中运行代码时,它会将abcd
作为文件中的最后一个有效字符串。
当您在Linux中使用相同的文件运行代码时,它将拾取一个空字符串作为文件中的最后一个有效字符串。
如果清理文件以包含
abcd<LF>
它在Linux上运行良好。
建议进一步改进:
将while
循环更改为:
while (dFile >> secondstr)
{
}
有关详细信息,请参阅Why is iostream::eof inside a loop condition considered wrong?。