push_back()の仕方 – プログラミング – Home

通知
すべてクリア

push_back()の仕方


arf
 arf
(@arf)
ゲスト
結合: 16年前
投稿: 1
Topic starter  

学生の名前と成績をメンバとする構造体と乱数で成績を作って出力したいです。
しかし、現状では、点数はうまくできていますが、生徒の名前がうまく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')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

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();
}
なんじゃないかな。
//動作確認なし


返信引用
.....
 .....
(@.....)
ゲスト
結合: 16年前
投稿: 16
 

srandは?


返信引用
としや
 としや
(@としや)
ゲスト
結合: 16年前
投稿: 4
 

>>wclrp ( 'o')

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


返信引用
うみんちゅ
 うみんちゅ
(@うみんちゅ)
ゲスト
結合: 16年前
投稿: 15
 

わりかしどうでもいいことですが
srand((unsigned)time(NULL));
とかを最初にしないとrandの出力が毎回同じだし
0から100までの乱数なら
rand()%101
とすべきです。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました