C++ 为什么getline()不';你不能从文件中读取任何内容吗?

C++ 为什么getline()不';你不能从文件中读取任何内容吗?,c++,readline,C++,Readline,我已经编写了一个代码,它接受一个txt文件作为输入,并进行解析,然后将它们放入2d数组myarray[][2]。 输入文件结构如下所示: aaa/bbb bbb/ccc ccc/ddd myarray[0][0] = "aaa" myarray[0][1] = "bbb" myarray[1][0] = "bbb" myarray[1][1] = "ccc" 它应该这样解析: aaa/bbb bbb/ccc cc

我已经编写了一个代码,它接受一个txt文件作为输入,并进行解析,然后将它们放入2d数组myarray[][2]。 输入文件结构如下所示:

aaa/bbb
bbb/ccc
ccc/ddd
myarray[0][0] = "aaa"
myarray[0][1] = "bbb"
myarray[1][0] = "bbb"
myarray[1][1] = "ccc"
它应该这样解析:

aaa/bbb
bbb/ccc
ccc/ddd
myarray[0][0] = "aaa"
myarray[0][1] = "bbb"
myarray[1][0] = "bbb"
myarray[1][1] = "ccc"
我为此制定的代码:

void Parse_File(string file){
    ifstream inFile;
    inFile.open(file);
    if (inFile.is_open()){
        inFile.clear();
        int lines = count(istreambuf_iterator<char>(inFile), istreambuf_iterator<char>(), '\n');
        string myarray[lines][2];
        int mycount = 0;
        do{
            getline(inFile, input);
            myarray[mycount][0] = input.substr(0, input.find("/"));
            myarray[mycount][1] = input.substr(input.find("/") +1, input.length());
            mycount++;
        }while (input != "");
    }else{
        Fatal_Err("File Doesn't Exist");
    }
    inFile.close();
}
void解析文件(字符串文件){
河流充填;
inFile.open(文件);
if(infle.is_open()){
infle.clear();
int lines=count(istreambuf_迭代器(infle),istreambuf_迭代器(),'\n');
字符串myarray[行][2];
int mycount=0;
做{
getline(填充,输入);
myarray[mycount][0]=input.substr(0,input.find(“/”);
myarray[mycount][1]=input.substr(input.find(“/”)+1,input.length());
mycount++;
}while(输入!=“”);
}否则{
致命错误(“文件不存在”);
}
infle.close();
}

但是myarray在这个函数之后没有任何内容。do while语句不循环。我不明白为什么。感谢您的帮助。谢谢。

将“getline(infle,input);”移动到循环的末尾,并在输入之前再次调用它。输入在进入循环之前可能是“”,因此循环永远不会被调用,输入也永远不会更新。

您的文件有一些问题,但主要问题是:您忘记将文件读取指针带回文本文档的开头。
count
函数将所述指针带到末尾,因此需要将其带回来

因此,您需要使用
seekg()
函数将指针拖动到您希望的任何位置

看看下面的代码是否适合您

void解析文件(字符串文件)
{
河流充填;
inFile.open(文件);
if(infle.is_open())
{
infle.clear();
int lines=count(istreambuf_迭代器(infle),istreambuf_迭代器(),'\n');
//陷阱:通过计算行数,您已经到达了文件的末尾。
seekg(0);//陷阱已解决:我现在已将指针移回文件的开头。
....
..//代码的其余部分
}
}

此外,您还需要学习调试,以便更容易地理解代码。我建议。

在您阅读了
计数
调用中的所有数据后,从
infle
中还有什么可以读取的?
输入在哪里声明/定义?很抱歉
readline()
。我的错误。输入是由代码> STD::String输入声明的,此外,VLA不是标准C++。将数组放入块中有什么意义?不要这样做:
string**myarray=newstring*[lines]我们是一个向量。不要这样做:
而(!infle.eof())
它被破坏了。请看,这在大多数情况下也是错误的:
++行
。仅当文件中的最后一个字符不是“\n”时,手动使用“新建/删除”是有固有缺陷的,因为您没有考虑异常及其对手动资源管理的影响。您应该使用RAII来保证您不泄漏C++中的资源,这导致我们使用正确的类来管理资源(在这种情况下是向量)。否则你也可以用C写。