push_back()の仕方

[戻る]
arf 2009/05/27(水) 05:51:17
学生の名前と成績をメンバとする構造体と乱数で成績を作って出力したいです。
しかし、現状では、点数はうまくできていますが、生徒の名前がうまくpush_backされて
いません。
点数をpush_backする場所を変えればいいのですか?
初歩的な質問ですが教えてください。

#include<iostream>
#include<iomanip>
#include<vector>
#include<string>
using namespace std;

struct student{
    string name;
    int point;
};
inline int val() { return rand()%100;}  //0から100までの乱数

int main(void) {
    vector<student>group;
    student a;

    
    cout<<"名前を5人分入力してください"<<endl;
    for(int i=0; i<5; i++){
    cin>>a.name;

    }
    
    for(int i=0; i<5; i++) {
        a.point=val();
        group.push_back(a);
    }
    
    for(int i=0; i<5;i++){
    cout<<group[i].name<<"さんは"<<group[i].point<<"点です"<<endl;
    }
}

wclrp ( 'o') 2009/05/27(水) 07:30:31
for(int i=0; i<5; i++){
  cin>>a.name;
}
これじゃ後に入れた値で上書きだろ。
a.nameへ入れた1番目の入力は2番目の入力で書きかえられ
a.nameへ入れた2番目の入力は3番目の入力で書きかえられ
……
結果a.nameには5番目の入力が入っている。

for(int i=0; i<5; i++){
  cin>>a.name;
  a.point=val();
  group.push_back(a);
}
あるいは
for(int i=0; i<5; i++){
  cin>>a.name;
  group.push_back(a);
}
for(int i=0; i<5; i++){
  group[i].point=val();
}
なんじゃないかな。
//動作確認なし

..... 2009/05/27(水) 13:15:59
srandは?

としや 2009/05/28(木) 00:34:12
>>wclrp ( 'o') 

ありがとうございました。
上書きされてたから、最後の値しか出力されなかったんですね。。。

うみんちゅ 2009/06/01(月) 15:13:06
わりかしどうでもいいことですが
srand((unsigned)time(NULL));
とかを最初にしないとrandの出力が毎回同じだし
0から100までの乱数なら
rand()%101
とすべきです。

あと解決したら解決マークを付けてください

古いスレッドには追加発言できません。