I compiled this program from Accelarated C++ chapter 4 that calculates grades of students using functions and structures.
Its 7 files so i didnt post it all it would take up too much place here.
The program's missing output when entering datas so i took it that we had to integrate it ourselves thus so did i.
main.cpp
Code:
#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
#include "grade.h"
#include "Student_info.h"
#include "median.h"
using std::cin; using std::setprecision;
using std::cout; using std::sort;
using std::domain_error; using std::streamsize;
using std::endl; using std::string;
using std::max; using std::vector;
int main()
{
vector<Student_info> students;
Student_info record;
string::size_type maxlen = 0; // the length of the longest name
// read and store all the students data.
// Invariant: students contains all the student records read so far
// maxlen contains the length of the longest name in students
while (read(cin, record)) {
// find length of longest name
maxlen = max(maxlen, record.name.size());
students.push_back(record);
}
// alphabetize the student records
sort(students.begin(), students.end(), compare);
// write the names and grades
for (vector<Student_info>::size_type i = 0; i != students.size(); ++i) {
// write the name, padded on the right to maxlen + 1 characters
cout << students[i].name
<< string(maxlen + 1 - students[i].name.size(), ' ');
// compute and write the grade
try {
double final_grade = grade(students[i]);
streamsize prec = cout.precision();
cout << setprecision(3) << final_grade
<< setprecision(prec);
} catch (domain_error e) {
cout << e.what();
}
cout << endl;
}
system ("pause");
return 0;
}
Student_info.cpp
Code:
// source file for Student_info-related functions
#include "Student_info.h"
using std::istream; using std::vector;
using std::cout; using std::endl;
bool compare(const Student_info& x, const Student_info& y)
{
return x.name < y.name;
}
istream& read(istream& is, Student_info& s)
{ //here's where i added output info
// read and store the student's name and midterm and final exam grades
cout<<"Enter name: ";
is >> s.name;
cout<<endl;
cout<<"Enter midterm grade: "<<endl;
is >> s.midterm;
cout<<endl;
cout<<"Enter final grade: "<<endl;
is >> s.final;
cout<<endl;
read_hw(is, s.homework); // read and store all the student's homework grades
return is;
}
// read homework grades from an input stream into a `vector'
istream& read_hw(istream& in, vector<double>& hw)
{
if (in) {
// get rid of previous contents
hw.clear();
// read homework grades
double x;
cout << "Enter homework grades (end with eof): ";
while (in >> x)
hw.push_back(x);
// clear the stream so that input will work for the next student
in.clear();
}
return in;
}
My problem is when we're in the first loop of Enter name... etc it works well
but for the second time it just outputs "Enter name" and didnt wait for input
it outputs "Enter midterm grade" right away.
I can post the rest of the files if needed. Thanks.