【问题标题】:How to read data from a file and store the names from the file in one vector, and the scores from the file in another?如何从文件中读取数据并将文件中的名称存储在一个向量中,并将文件中的分数存储在另一个向量中?
【发布时间】:2020-04-30 04:56:43
【问题描述】:

我的提示问: 在这个程序中,我们将从一个名为的文件中输入 100 名学生的姓名和分数 学生.txt。该文件已提供给您。您必须使用两个向量变量,一个用于存储 学生姓名,另一个用于存储学生成绩。

引用的文本文件格式如下:

詹姆斯 80

弗兰克 67

珍妮 95

我正在努力理解如何从一个文件中读取两个变量并将其存储到两个向量中,所以如果到目前为止我所拥有的没有意义,我不会完全震惊。在我的 >> 在 infile 之后有一条错误消息说没有与这些操作数匹配的运算符,我不知道该怎么做。此外,我只是不知道从这里去哪里,或者如何修复我当前的代码。任何帮助表示赞赏。请耐心等待,我对此很陌生。

//Name
//This program will read and sort names and grades from a file using functions and vectors
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;

int main()
{
    ifstream infile;
    infile.open("student.txt");

    if (infile.fail() == false)
    {
        vector<string> name;
        vector<int> score;

        while (infile >> name)
        {
            infile >> score;
        }
    }
    else
    {
        cout << "Could not open the file." << endl;
    }
return 0;
}

【问题讨论】:

  • 你希望infile &gt;&gt; name 做什么?
  • 另外,在尝试将数据读入两个向量之前,请专注于将数据读入 一个 向量。简化您的作业并使用仅包含名称的文件。一旦你完成了这么多工作,你就可以扩展你的程序来处理分数。
  • 这里有更多关于简化问题的内容,正如@JaMit 明智地建议的那样:ericlippert.com/2014/03/21/find-a-simpler-problem 实际上我建议进一步简化,首先读入一个字符串。然后查看如何将单个字符串存储到向量中。
  • @JaMiT 我通过遵循我的教授提供的一个较旧的程序写道,但是,它是在不同的上下文中。我希望它会读取第一个值并将其存储在 name 下,然后在 while 循环下移动到第二个值并将其存储在 score 下,然后重复。我要试试你说的简化问题
  • 您必须使用两个向量变量,一个用于存储学生姓名,另一个用于存储学生分数。 很高兴看到允许使用 vector 的作业,但在现实世界中,您需要一个聚合名称和分数的结构的vector。它大大减少了所需的簿记量。

标签: c++ file vector operators fstream


【解决方案1】:

所以我认为您没有意识到您需要将问题分解为更小的步骤。您(大概)知道如何从文件中读取单个值,并且(大概)知道如何将值添加到向量。你似乎意识到你需要某种循环。您要做的就是将这些技术放在一起,以达到您想要的整体效果。通常,当您这样做时,您需要引入 变量 来保存计算中的中间值。这里就是这种情况,我们会将文件中的值读取到变量中,然后将这些变量中的值添加到向量中。

    vector<string> all_names;
    vector<int> all_scores;
    string name;
    int score;
    while (infile >> name >> score) // read one name and one score
    {
        all_names.push_back(name); // add that name to vector
        all_scores.push_back(score); // add that score to vector
    }

您在 cmets 中获得的建议是,如果问题太复杂,您应该首先使用更简单的版本,这也是非常好的建议。许多初学者在接到一项大型或复杂的任务时会尝试一次解决所有问题。专业人士不这样做,初学者也不应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 2020-03-26
    • 2016-08-30
    相关资源
    最近更新 更多