因此,我需要帮助创建一个程序,该程序将打开文件并将文件中的数据读入结构数组,然后计算各种事物,如最高,最低,平均和标准偏差。现在,我更关心如何读取实际文件并将其放入结构数组中。
以下是作业的说明:
- 您将从输入文件scores.txt中读取输入数据(将在中发布 练习曲);和数据的格式(studentID,名字,姓氏,考试1, 考试2和考试3)。
- 将从文件中读取一个学生的每个数据行,然后将其分配给a 结构变量。因此,您需要一个结构数组来存储所有结构 从输入文件中读取的数据。这将是一维数组。
- 一旦从文件中读取数据到数组,就需要计算 并显示每个考试的以下统计数据。
这是数据文件:
var
1234 David Dalton 82 86 80
9138 Shirley Gross 90 98 94
3124 Cynthia Morley 87 84 82
4532 Albert Roberts 56 89 78
5678 Amelia Pauls 90 87 65
6134 Samson Smith 29 65 33
7874 Michael Garett 91 92 92
8026 Melissa Downey 74 75 89
9893 Gabe Yu 69 66 68
目前,我忽略了我在评论中提出的变量。我正在考虑放弃一个openFile函数,只是在main函数中执行它,但我决定反对它使我的主要看起来有点“干净”。在我调用openFile函数之后,我考虑过只做#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
struct StudentData
{
int studentID;
string first_name;
string last_name;
int exam1;
int exam2;
int exam3;
};
const int SIZE = 20;
// Function prototypes
void openInputFile(ifstream &, string);
int main()
{
// Variables
//int lowest, highest;
//double average, standardDeviation;
StudentData arr[SIZE];
ifstream inFile;
string inFileName = "scores.txt";
// Call function to read data in file
openInputFile(inFile, inFileName);
//Close input file
inFile.close();
system("PAUSE");
return 0;
}
/**
* Pre-condition:
* Post-condition:
*/
void openInputFile(ifstream &inFile, string inFileName)
{
//Open the file
inFile.open(inFileName);
//Input validation
if (!inFile)
{
cout << "Error to open file." << endl;
cout << endl;
return;
}
}
但是它似乎不太可能工作或有意义。
答案 0 :(得分:3)
我的建议:
StudentData
对象。while
中添加main
循环。在循环的每次迭代中,阅读StudentData
std::istream& operator>>(std::istream& in, StudentData& st)
{
return (in >> st.studentID
>> st.first_name
>> st.last_name
>> st.exam1
>> st.exam2
>> st.exam3);
}
和main
:
openInputFile(inFile, inFileName);
size_t numItems = 0;
while ( inFile >> arr[numItems] )
++numItems;
最后,您已成功将numItems
项目读入arr
。
答案 1 :(得分:0)
这应该将您的所有数据读入数组,您需要一个增量器
ifstream inStream; inStream.open(&#34; scores.txt&#34);
while (!inStream.eof())
{
inStream >> StudentData arr[SIZE];
};
inStream.close();