0
struct Student_info {
std::string name;
double midterm,final;
std::vector<double> homework;
};
私は、上記の構造体を使用して個々の学生を定義するAccelerated C++のC++プログラムを作成しています。目標は、複数の生徒の成績を保存して計算することです。プログラムは、名前、2つのテストスコア、そしていくつかの未知数の宿題を入力して標準入力から入力する必要があります。これらの値はすべて構造体にロードされ、構造体はStudent_infoのベクトルに追加されます。これを行うためのコードは以下の通りです。Cinは入力を誤って保持する
int main(){
std::vector<Student_info> students;
Student_info record;
std::string::size_type maxlen = 0;
while(read(std::cin,record)){
maxlen = std::max(maxlen,record.name.size());
students.push_back(record);
}
}
std::istream& read(std::istream& is, Student_info& student){
std::cout << "Enter your name, midterm, and final grade: ";
is >> student.name >> student.midterm >> student.final;
std::cout << student.name << " "<< student.midterm << " " << student.final;
read_hw(is,student.homework);
return is;
}
std::istream& read_hw(std::istream& in,std::vector<double>& hw){
if(in){
hw.clear();
double x;
while(in>>x){
hw.push_back(x);
}
in.clear();
in.ignore(std::numeric_limits<std::streamsize>::max());
}
return in;
}
ただし、入力が正しく読み取れません。
Sam 90 88 90 88 89 \eof Jack 86 84 85 80 82 \eof
の入力は与える:
student.name = Sam
student.midterm = 90.
student.final = 88.
student.homework = [90,88,89]
student.name = \eof
student.midterm = 0
student.final = 88
student.homework
読み取りが失敗し、whileループが終了し、ジャックは、ベクターに追加されることは決してありませんので、この最後の生徒が構造体に適合していません。
私は「学生」についての質問に答えたので、下落を期待していました。それはいつも悪い幸運です:) –