【问题标题】:Strange getline behavior in c++c ++中奇怪的getline行为
【发布时间】:2013-07-10 01:38:15
【问题描述】:

我有以下文件:

BB
7.501106 5.324115
7.997006 8.287983
11.314904 11.768281
...

我 100% 确定文件没问题,我什至在 vim 中用:set list 显示换行符:

BB$
7.501106 5.324115$
7.997006 8.287983$
11.314904 11.768281$
...

但是当我在第一行打开并阅读时,会发生一些奇怪的事情。我有以下代码:

std::ifstream file(filename);
std::string line;
if (!file.is_open()) {
    std::cerr << "parseConfig: Error opening config file: " << filename << std::endl;
    exit(1);
}

getline(file, line);
std::cout << "line is: <" << line << ">" << std::endl;
if (line.compare("BB")) {
    std::cerr << "parseConfig: Error in config file, first line is not BB" << std::endl;
    exit(1);
}

现在我知道文件已正确打开,因为我们一直到最终错误。

打印出来如下:

>ine is: <BB    //What!!!??  Why did this happen?
parseConfig: Error in config file, first line is not BB

这让我觉得很奇怪,就好像文本文件中有回车一样。但我很确定没有。

有什么想法吗?

【问题讨论】:

    标签: c++ string getline


    【解决方案1】:

    看起来该文件处于 DOS 模式。检查vim底部是否显示[dos],或者检查file yourfile.txt

    另一种检查方法是将文件或程序的输出通过cat -A(或cat -v,如果您的猫没有-A)。回车将显示为^M

    要转换为 UNIX 格式,请在 vim 中执行 :set ff=unix 然后保存文件。或者使用dos2unix 命令行工具(如果有的话)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      相关资源
      最近更新 更多