std::getline 在从 ifstream 读取时不会跳过空行
std::getline doesn't skip empty lines when reading from ifstream
考虑此代码:
vector<string> parse(char* _config) {
ifstream my_file(_config);
vector<string> my_lines;
string nextLine;
while (std::getline(my_file, nextLine)) {
if (nextLine[0] == '#' || nextLine.empty() || nextLine == "") continue;
my_lines.push_back(nextLine);
}
return my_lines;
}
和此配置文件:
#Verbal OFF
0
#Highest numeric value
100
#Deck
67D 44D 54D 63D AS 69H 100D 41H 100C 39H 10H 85H 7D 42S 6C 67H 61D 33D 28H 93S QH 5D 91C 40S 50C 74S 8C 98C 96C 71D 82S 75S 23D 40C 29S QC 84C 16C 80D 13H 35S
#Players
P1 1
P2 2
我的目标是将配置文件解析为字符串的向量,逐行解析,忽略空行和"#"字符。
在Visual Studio上运行此代码时,输出是正确的,但是,在使用G 的Linux上运行时,我仍然会得到一些空行。
您的输入文件很可能具有CR LF
结尾的行,即Windows/DOS文本文件。Linux期望仅以LF
结尾的所有行,因此在Linux上,std::getline()
最终读取包含一个CR
字符的行。
在检查nextLine
内容的现有代码之前,检查行是否是非空的,并以CR
字符结束,然后将其删除。然后继续使用您现有的if
语句。
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- ifstream文件在从行中读取时被清除
- 有没有办法在从编译器获取参数时避免预处理器宏?
- gSoap在从.wsdl创建.h期间出现错误
- 如何在从抽象基派生的类中实现相同的方法?
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- 为什么向量内部的指针在从函数返回时会发生变化?
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 如何在从文件中读取整数时使用 file.eof()?
- 为什么 c++11 std::normal_distribution 在从函数调用时返回相同的模式?
- Getline在读取文本文件时有一种奇怪的行为
- 错误:基类在从基类父派生类 Son 时未定义
- 有没有办法在从临时返回按值string_view时获得编译器警告?
- "acceptor"在从TCP迁移到UDP时不是"boost::asio::ip::udp
- C++:如何在从给定缓存中排除数字的同时生成随机数
- 在从 C++ 转换为 C# 的代码中,我应该使用什么而不是 memcpy?
- 我在使用 cin.getline() 从用户那里获取 3 个字符串并使用指针数组来存储它们时遇到问题
- std::getline 在从 ifstream 读取时不会跳过空行
- 用getline在字符串中从文件中读取,然后将数字从int数组中的字符串划分