2016-04-18 13 views
-1

ファイルから読み込んで値を並列配列に格納する関数を書く必要があります。テキストファイルには名前があり、次の行には4つのスコアがあります。どのようにこれを達成するためのヒント。 ここにテキストファイルの一例であるファイルから読み込んで配列に格納するC++

joe 
30 75 90 88 
ben 
100 75 93 20 

は今ここに記録し、複数のグレードごとに1つだけの名前がありますので、コードは私が読書を移動し、レコードごとに、これまで

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]; 
    } 
} 
+2

それぞれの学生は4つの等級を持ち、同じインデックスを使用しています。「i」は動作しません。どちらも「並列配列」ではありません。学生数と成績数の間に1対2の関係はありません。 – PaulMcKenzie

+0

@PaulMcKenzieそれはまったくそうではありません。実行する必要があるのは、配列に読み込まれたファイルと要素が追加されただけです。必要な場所に配列を開始できます。つまり、joeが最初の4を、0 - 3など..あなたは複数のループに侵入するだけです。また、どのようにどのような成績を取得するかを決定していますか? – Afflicted

+0

STLコンテナを使用できますか、または自分で配列を実装する必要がありますか?これは簡単な例を挙げれば、 'std :: map >という公園での散歩でしょう。 – Nacho

答えて

1

を持っていますforの前に名前の:

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

あなたのデザインには複雑さがあります。各学生は複数の学年を持っています。したがって、この関係を処理するために、あなたが学生の2次元配列や構造体の配列のいずれかが必要になります。

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]; 
関連する問題