c++中奇怪的getline行为
Strange getline behavior in c++
我有以下文件:
BB
7.501106 5.324115
7.997006 8.287983
11.314904 11.768281
...
我100%确信这个文件是好的,我甚至用:set list
:在vim中显示了换行符
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
这让我觉得很奇怪,就好像文本文件中有回车一样。但我确信没有。
有什么想法吗?
看起来该文件处于DOS模式。检查vim是否在底部显示[dos]
,或者检查file yourfile.txt
。
另一种检查方法是通过cat -A
(如果您的猫没有-A
,则通过cat -v
)管道传输文件或程序输出。回车将显示为^M
。
要转换为UNIX格式,请在vim中执行:set ff=unix
,然后保存文件。或者使用dos2unix
命令行工具(如果有)。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- Seg Fault Issue C++ (file IO / getline)
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- arr[-1]在c++中的奇怪行为
- 继承期间显示未知行为的子类
- 如何在c++中使用引用实现类似python的行为
- G锁定铸造到基础上会释放模拟行为
- Getline在读取文本文件时有一种奇怪的行为
- 如何使此函数使用 getline 读取字符串并使用 int 执行相同的行为?
- istream::getline() 的令人费解的行为
- C++ getline(cin,变量)行为不端.网站上没有任何解决方案有帮助
- 非常奇怪的弦乐和std :: getline行为
- 使用 getline() 的 Wierd 行为
- cin.getline()的奇怪行为
- C++中getline的Wierd行为
- 使用 getline 进行 csv 处理时行为不明确
- c++ifstream中的Getline导致不必要的行为
- c++中奇怪的getline行为
- 与getline C++的奇怪行为
- getline()的实际行为是怎样的?