从文件中获取输入并将其保存到临时内存中

takin input from a file and saving it into temporary memory?

本文关键字:保存 内存 文件 获取 输入      更新时间:2023-10-16

我有一个结构化数组,它最初是空的,有4种数据类型,分别为ng、string、2个int和1个float。我有一个dvd标题和其他属性的列表(3个其他,其中2个是int,最后一个是float)保存在一个文本文件中,我需要将文本文件中的数据输入到我的结构中。这是我的代码,但似乎不起作用?

        do
        {
           for(int i=0;i<MAX_BOOKS;i++)
           {
                tempTitle= getline(myfile,line);
                temChapters = getline(myfile,line);
                tempReview = getline(myfile,line);
                tempPrice = getline(myfile,line);
           }
        }while(!myfile.eof());

getline的返回是从中读取的流,而不是从中读取数据的字符串。

您还将重复地将数据读取到同一个位置(line),而不将其保存在任何位置。

你的循环有缺陷(while (!somefile.eof())基本上总是坏掉的)。

您通常想要的是从重载operator>>开始,从流中读取单个逻辑项,然后使用它来填充这些项的向量。

// The structure of a single item:
struct item { 
    std::string title;
    int chapters;
    int review;
    int price;    
};
// read one item from a stream:
std::istream &operator>>(std::istream &is, item &i) { 
    std::getline(is, i.title);
    is >> i.chapters >> i.review >> i.price;
    is.ignore(4096, 'n'); // ignore through end of line.
    return is;
}
// create a vector of items from a stream of items:
std::vector<item> items((std::istream_iterator<item>(myfile)), 
                         std::istream_iterator<item>());

您应该这样构建它:

std::ifstream myfile("filename.dat");
std::string line;
while (getline(myfile, line))
{
    // you can use std::string::find(), std::string::at(), std::string::substr
    // to split the line into the necessary pieces
}

然后,您可以使用Jerry coffins答案将每个片段保存在vector<item>中。