前提
C++を独学している初学者です。
現在、タイトル、著者名、在庫数を入力して登録するというプログラムを作成中です。
構造体を使わずvecterを用いて現状のコードを書き換えたいのですが、vecterが現在使用している教科書などに無く、躓いてしまっています。
実現したいこと
- cardという構造体を使用せず、同様の機能をvecterを用いて実装する
- 現在動いているこのプログラムが、vecterを用いたプログラムに書き換わっても同様に動作をする
該当のソースコード
C++
1/* ヘッダ */ 2#include <iostream> 3#include <vector> 4using namespace std; 5 6/* 構造体定義 */ 7struct carda 8{ 9 /* 変数 */ 10 char titlea[50+1]; 11 char authora[50+1]; 12 int numa; 13 14 /* コンストラクタ */ 15 carda(){ 16 cout << "コンストラクタを呼び出しました。\n"; 17 } 18}; 19 20 21/* 構造体定義 */ 22struct cardb 23{ 24 /* 変数 */ 25 char titleb[50+1]; 26 char authorb[50+1]; 27 int numb; 28 29 /* コンストラクタ */ 30 cardb(){ 31 cout << "コンストラクタを呼び出しました。\n"; 32 } 33}; 34 35 36/* メイン処理 */ 37int main() 38{ 39 /* cardaへの登録 */ 40 carda booka; 41 42 cout << "本のタイトルを入力してください。\n"; 43 cin >> booka.titlea; 44 45 cout << "著者名を入力してください。\n"; 46 cin >> booka.authora; 47 48 cout << "在庫の数を入力してください。\n"; 49 cin >> booka.numa; 50 51 /* 登録確認 */ 52 cout << "以下の内容で登録します:\n"; 53 cout << "タイトル:" << booka.titlea << "\n"; 54 cout << "著者名:" << booka.authora << "\n"; 55 cout << "在庫数:" << booka.numa << "\n"; 56 57 /* cardbへの登録 */ 58 cardb bookb; 59 60 cout << "本のタイトルを入力してください。\n"; 61 cin >> bookb.titleb; 62 63 cout << "著者名を入力してください。\n"; 64 cin >> bookb.authorb; 65 66 cout << "在庫の数を入力してください。\n"; 67 cin >> bookb.numb; 68 69 /* 登録確認 */ 70 cout << "以下の内容で登録します:\n"; 71 cout << "タイトル:" << bookb.titleb << "\n"; 72 cout << "著者名:" << bookb.authorb << "\n"; 73 cout << "在庫数:" << bookb.numb << "\n"; 74 75 76 77 return 0; 78}
補足情報(FW/ツールのバージョンなど)
VScode(ver: 1.69.2)
構造体を使うことと std::vector を使うこととは背反ではないので,何か根本から話が間違っているような気がします.
あと,提示されたコードを見た感じだと,vectorとか言い出すよりも前に「配列」を先に修めるのが良さそうに見えます.
std::vectorの各要素に現在のcardaとbの構造体のメンバーを割り当てたいと言う要望でしょうか。であればちょっと妙な要件に思いますが、そんな課題、問題があったのでしょうか。
carda,cardbを割り当てたいというよりも、出された課題が「main関数で、構造体を二件作成するのではなく、vectorを用いて実装する。二件分のレコードを収納、出力する」というものでした。
であれば、既にいただいている回答で示されるようなことになるかと思います。

回答3件
あなたの回答
tips
プレビュー