c++ - 帮助从文本文件 c++ 中读取每五行

标签 c++ file text-files

作为一项更大任务的一部分,我必须在一个类中创建一个方法,该方法可以读取五行数据,然后将该数据放入一个动态创建的对象中。我不确定如何将五行数据分别放入对象中。该代码应该有助于更好地解释,但它不能按预期工作。如果有人能发现我的错误,请告诉我。如果你能帮助我,我将不胜感激。此外,每读五行我创建一个新对象,直到没有留下任何行。我怎么知道是否还有线路?再次感谢您的帮助,感谢您的宝贵时间。

    inline void readFromFile(const string& fileName){

        string title;
        string category;
        unsigned int runningTime;
        unsigned int yearOfRelease;
        double price;

        ifstream myReadFile;
        myReadFile.open(fileName);

        while( myReadFile )
        {
            myReadFile>>title;
            myReadFile >> category;
            myReadFile >> runningTime;
            myReadFile >> yearOfRelease;
            myReadFile >> price;

            v.push_back(new DVD(title,category,runningTime,yearOfRelease,price));
        }

        myReadFile.close();

        for(unsigned int i = 0; i < v.size(); i++){

            cout << *v.at(i) << endl;

        }

    }

最佳答案

问题是带有字符串的运算符 >> 只读取一个单词(而不是一行)。

您需要使用 std::getline() 函数。

       std::getline( myReadFile, title);
       std::getline( myReadFile, category);
       std::getline( myReadFile, runningTime);
       std::getline( myReadFile, yearOfRelease);
       std::getline( myReadFile, price);

为方便起见,您应该为 DVD 编写一个运算符 >>

std::istream& operator>>(std::istream& str, DVD& data)
{
    // Read data into data here
    return str;
}

现在你的循环变得更容易编写了:

std::copy(std::istream_iterator<DVD>(myReadFile),
          std::istream_iterator<DVD>(),
          std::back_inserter(v)
         );

关于c++ - 帮助从文本文件 c++ 中读取每五行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3911533/

相关文章:

c++ - 声明结构时何时使用 new

python - 如何在 Python 中读取一行 csv 数据?

c++ - 从同一网络中另一台机器的哈希表获取 wordID

php - 在 PHP 中使用用户输入的变量设置文件名

c++ - Windows CopyFileA 失败然后成功

java - 如何使用 PrintWriter 多次写入文本文件

java - 如何从文本文件中提取特定数据然后显示它(Java)

Android 从 SD 卡读取文本文件超过 5 mb 错误

c++ - boost lib 构建配置变化

c++ - 结构数组不会初始化