C++ 无法读取文件,行为怪异

C++ 无法读取文件,行为怪异,c++,macos,clion,C++,Macos,Clion,我正在尝试读取给定文件的所有行 由于某些原因,std::getline无法按预期工作 main.cpp: #include <iostream> #include <fstream> #include <string> int main() { std::string filePath = "../init.txt"; std::ifstream inputFile(filePath); std::string str; int

我正在尝试读取给定文件的所有行
由于某些原因,
std::getline
无法按预期工作
main.cpp:

#include <iostream>
#include <fstream>
#include <string>
int main() {
    std::string filePath = "../init.txt";
    std::ifstream inputFile(filePath);
    std::string str;
    int i = 0;
    while (std::getline(inputFile,str)) {
        std::cout << str << std::endl;
        i++;
    }
    std::cout << i << std::endl;
    inputFile.close();
    return 0;
}
如您所见,我想知道它使用变量
I
进入循环的次数。输出为:

solid,Tree,4,4,[20 20]
1
为什么会发生这种情况?

您的文件中有CR换行符,而不是Unix风格操作系统的标准换行符,因此
getline()
将整个文件作为一行读取。您可以使用以下方法修复
终端中的文件:

tr '\r' '\n' < init.txt > newinit.txt
mv newinit.txt < init.txt
tr'\r'\n'newinit.txt
mv newinit.txt
无法在我的桌面上复制。我的一个朋友实际上在
std::getline
上有过这种行为。他的代码也很好,但由于旧版本的IDE编译错误。我不知道你怎么样,OP,但如果你正在处理Code::Blocks,并且从不同于原始开发者的源下载了它,请重新下载并重新安装它,不能重复。
std::string filePath=“../init.txt”是否有问题?也许您正在读取另一个
init.txt
1级目录?您的数据文件中有错误类型的换行符。它使用
CR
作为换行符,但是
C++
使用
LF
。所以整个文件都是作为一行来读的。@Barmar你应该把它变成一个答案。你想得到什么帮助?如果你的意思是向上投票,我已经这么做了。我不明白你在说什么。这和这个问题有什么关系?你是想让我帮你回答这个问题吗
tr '\r' '\n' < init.txt > newinit.txt
mv newinit.txt < init.txt