質問: 1;i<=list.num;i++) 54 { 55 list.student[i].resize(15); 56 list.input_name(i); 57 } 58 59 while(1) 60 { 61 cout << "番号を入力して下さい" << endl; 62 cout << list.b; 63 if(list.b > list.num || list.b < 1) 64 { 65 cout << "番号は1以上かつ" << list.num << "以下" <
回答: ちょっと ここ(teratail)の使い方が違いますよ。 他の回答者や質問者の書き方を参考にしてください。 まず、気になったのは、必ず vectorのvectorでないといけませんか? 単に文字列を使うなら std::string が(まだ)いいです。 char* とするとアドレスが確保されるようです。コツがいるので、 ``` std::vector strs; ``` みたいにやったほうがわかりやすいですし、使いやすいです。 また、StudentListクラスにあるnum, b, student はなるべくprivateに。 参考: オブジェクト指向設計 getter, setterを使うなとはどういうことか また、もしかして日本語を入力していませんか? 特に student を入力させるところ。 日本語は基本的に全角文字です。 半角英数字なら 配列だと 一要素分 で済む場合でも、全角だと基本的に 二要素は必要です。( バイト数によって変わるのかな? ここはわからんが。 ) なので、単純に考えると、 "あいうえお" でも日本語的に考えると5文字。でも半角英数字と比較した場合は、単純計算で 5×2=10 となり、10文字扱いになります。(厳密にはバイト数だけど。) ケータイサイズのケース( ケータイでもいいし、たばこでもいい。 ) に ノートパソコンを入れようとしているのと同じこと。 「え? 同じ人工物でしょ?」みたいな。 [追記1] ちなみに日本語みたいな全角で一文字とするような文字で構成するなら std::stringよりは **std::wstring** がいいみたいです。 定義は忘れましたが、std::stringはcharの動的確保系ですが、std::wstring は wchar_t の動的確保系です。 日本向けに発送して、かつ、個人開発なら std::wstringのほうが無難...かな? ちょっとコツが要りますが、std::wstringだと文字化けしにくいです。( ただしOSの設定とかによるかもしれないが。 ) std::stringだと、"あ" と構成するだけでも、1バイト目と2バイト目をチェックしてやっとわかる。 だから 1バイト目にそれだけで完結するデータが来たらそれで終了してしまう可能性がある。 文字コードはよくわからないので、あくまでイメージですが、 "さすが" と "d*pqが" が同じ... みたいな感じで文字化けする可能性が高いです。 std::wstring だと wchar_t なので "あ" で一つ。と見なせるらしいので、日本語を扱うならこっちのほうが楽かな? また、私はあまりわかりませんが、std::stringはバグを持っているっぽいです。 (どっかの記事で見かけた...どこだったっけ?)