【解決方法】タスクを手伝ってください。

[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]

コメント

タイトルとURLをコピーしました