【问题标题】:reading from file and storing into array C++从文件读取并存储到数组 C++
【发布时间】:2016-04-18 15:05:56
【问题描述】:

我需要编写一个从文件中读取数据并将值存储到并行数组中的函数。在文本文件中我有一个名字,在下一行我有一组 4 个分数。关于如何实现这一点的任何提示。 这是文本文件的示例

joe
30 75 90 88
ben 
100 75 93 20

现在这是我到目前为止的代码

ifstream input;

int main()
 {
string nameArray[];
double grades[];
void nameGrade(string[], double[]);

input.open("scores.txt");

nameGrade(nameArray, grades);

for (int i = 0; i <4; i++)
{
    cout << "student name: " << nameArray[i] << " Student Grades: " << grades[i] << endl;
}
input.close();
return 0;
}

void nameGrade(string name[], double grade[])
{
    for (int i = 0; i < 5; i++)
    {
        getline(input,studentName[i]);
        input >> studentGrade[i];
    }
}

【问题讨论】:

  • 每个学生有 4 个成绩,因此使用相同的索引,i 不起作用,“并行数组”也不起作用。这不是学生人数和年级数之间的一二一对应。
  • @PaulMcKenzie 这根本不是真的,所要做的就是将文件读入数组,然后添加元素,您可以在需要的地方开始一个数组...即,如果joe 有前 4 个,然后是 0 - 3,依此类推。你只需要分成多个循环。还有 op 你如何确定谁得到什么成绩?
  • 您可以使用 STL 容器还是需要您自己实现数组?举个简单的例子,这将是在公园里散步,std::map&lt;std::string, std::vector&lt;unsigned&gt; &gt;
  • @Afflicted 当我看到“并行数组”时,我假设你有m 的东西,每个东西都包含n 的东西。所以thing[0]thing2[0] 是相关的,而不是thing[0]thing2[4] 或其他数字相关。
  • @afflicted 名字下面的4个等级对应第一个名字,我需要把4个等级加起来然后存储到对应的等级位置

标签: c++ arrays ifstream parallel-arrays


【解决方案1】:

由于每条记录只有1个名字,而且每条记录有多个等级,所以将名字的读法移到for循环之前:

void nameGrade(string& name,
               double grade[])
{
    getline(input,name);
    for (int i = 0; i < 5; i++)
    {
        input >> studentGrade[student_index * 5 + i];
    }
}

您的设计存在复杂性。每个学生都有一个以上的年级。因此,要处理这种关系,您将需要一个二维学生数组或一个结构数组:

struct Student_Name_Grades
{
  std::string name;
  std::vector<double> grades; // substitute array here if necessary.
};
std::vector<Student_Name_Grades> student_info;
// Or:  Student_Name_Grades student_info[MAXIMUM_STUDENTS];

另一种选择是设置 5 倍于学生数量的年级。所以要访问学生 #2 的成绩:

const unsigned int GRADES_PER_STUDENT = 5;
unsigned int student_index = 2;
double grade_1 = grades[student_index * GRADES_PER_STUDENT + 0];
double grade_2 = grades[student_index * GRADES_PER_STUDENT + 1];
double grade_3 = grades[student_index * GRADES_PER_STUDENT + 2];
double grade_4 = grades[student_index * GRADES_PER_STUDENT + 3];
double grade_5 = grades[student_index * GRADES_PER_STUDENT + 4];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 2020-12-26
    相关资源
    最近更新 更多