【问题标题】:C++ string file redirection discrepancy?C ++字符串文件重定向差异?
【发布时间】:2019-02-03 02:23:15
【问题描述】:

我正在编写一个程序,该程序通过标准输入接受输入,并根据输入执行操作。但是,与我自己的输入相比,输入的 txt 文件出现错误,我很好奇为什么。

std::string command;
std::getline(std::in, command); // first line is just "test"
if (command == "test")
{
    //works when I enter text manually through keyboard, but not from file
}

if (command.compare("test") == 1)
{
    //works reading the file
}

什么给了?这在我的程序中导致了一些逻辑错误,但从我所阅读的内容来看 == 和 .compare 应该没有那么不同。

有人知道如何解决这个可能的编码问题吗?

【问题讨论】:

  • 显示文件内容。
  • 您遇到的错误是什么?您可以编辑问题以包含错误的输出吗?
  • string::compare 在字符串相等时返回 zero,因此“有效”是一个谎言。
  • 不是谎言。 string::compare == 1 起作用的原因是因为总是有一个额外的 \r 字符。
  • 该检查没有做它应该做的事情,即检查是否相等。它改为检查不等式。如果您的文件包含“whatever”或“zzzzz”或“teszt”,则检查将同样通过。因此它没有用。因此,“有效”是谎言。

标签: c++ string file io


【解决方案1】:

我修好了。事实证明,有时从文件读取时,'\r' 字符会附加到末尾。这导致了我的错误。

希望这可以帮助其他陷入困境的人。

【讨论】:

  • 我猜您正在使用在 Windows 上创建的输入文件在 POSIX 系统(Linux、macOS、FreeBSD...)上运行程序。如果您在 Windows 系统上读取带有 Windows 行结尾的文件,C++ 运行时应自动将 "\r\n" 识别为换行符序列。
  • 是的,就是这样。感谢您的信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2015-11-08
相关资源
最近更新 更多