[ad_1]
動物園の動物を表す動物園構造を作成します。 構造体に次のデータが含まれているとします: 数値 (整数)、名前、重量 (キログラム単位)。 上記のzoo構造の3つの要素を持つ配列を宣言し、次の関数をテストします。 次の機能を作成します。
• キーボードを入力する関数 animal_create: 数字、名前、体重(0.5 t)
• 動物データを取得する関数 output_animal
• すべての動物の体重を 2 倍にする double_weight 関数
私が試したこと:
C++
#include <iostream>; using namespace std; int main() { struct Zoo { int number; string name; double weight; } Zoo animal_create(int number, string name, double weight) { Zoo zoo; zoo.number = number; zoo.name = name; zoo.weight = weight; retrun zoo; } void output_animal(Zoo zoo[3]) { for (int i = 0; i < 3; i++) { cout >> zoo[i]; } } Zoo double_weight(Zoo zoo) { zoo.weight = zoo.weight * 2; } int main() { Zoo zoo[3]; int number; string name; double weight; for (int i = 0; i < 3; i++) { cin >> number; cin >> name; cin >> weight; animal_create(number, name, weight); } output_animal(); cin >> number; double_weight(zoo[number]); } }
解決策 1
まず、あなたの animal_create
関数は、無視した Zoo インスタンスを返します。そのため、関数が終了すると、ユーザーが入力したデータは失われます。
それに加えて、それが返すインスタンスは関数に対してローカルであるため、関数が終了すると破棄されるため、必要に応じて保存して使用することはできません! (これはダングリング リファレンスの缶詰であり、追跡が非常に困難な一般的な障害です)
出力動物関数には何も渡さないでください!
配列要素へのポインタを渡します animal_create
ユーザーが代わりに入力した詳細を入力できるように機能します。 適切なパラメーターを他の関数に渡します。
解決策 2
メイン関数が別のメイン関数内に埋め込まれています。 コンパイラはそれを好まないでしょう。 外側の main 関数とその中かっこを削除すると、内側の main 関数が正常に機能するはずです。
解決策 3
コードにいくつかのエラーがあります。
そこから作業用スケルトンを作りました。 また、認識したエラーのいくつかをマークしました。
#include <iostream> // NO ';' here using namespace std; // struct and function declarations OUTSIDE main definition struct Zoo { int number; string name; double weight; }; Zoo animal_create(int number, string name, double weight); void output_animal(const Zoo & z); void double_weight(Zoo z[], size_t items ); constexpr size_t Items = 3; int main() { Zoo zoo[Items]; int number; string name; double weight; for (size_t i = 0; i < Items; i++) { cin >> number; cin >> name; cin >> weight; zoo[i] = animal_create(number, name, weight); // assign the i-th item of the array } for (size_t i = 0; i < Items; i++) output_animal(zoo[i]); double_weight(zoo, Items); for (size_t i= 0; i < Items; i++) output_animal(zoo[i]); } Zoo animal_create(int number, string name, double weight) { Zoo a; a.number = number; a.name = name; a.weight = weight; return a; // it is 'return' NOT 'retrun' } void output_animal(const Zoo & z) { cout << "...your implementation here..\n"; } void double_weight(Zoo zoo[], size_t items ) { for (size_t i=0; i<items; ++i) zoo[i].weight = 2 * zoo[i].weight; // double the weight of i-th item }
[ad_2]
コメント