0

ここの初心者は、構造化された配列の引数が関数に送信されることに問題があります。私の基本的な流血コンパイラは、私が設定した関数を気に入っていないようです。プログラム全体でいくつかの改善を行いましたが、これに何時間も苦労しています. このサイトで同等のプログラムを調べてみましたが、エラーを特定するのに十分なほど類似したものはありませんでした。私の在庫機能の仕事は、コーラなどの飲み物が 0 になったときに売り切れというメッセージを送ることです。別のコンパイラ エラーをクリアするために、関数定義を int main の後の下から上に移動しました。このプログラムはクラスの課題であり、次のテストで成功するためにポインターを使用できるため、このプログラムのどの部分についてもすべてのフィードバックを受け入れることができます。ありがとう

   #include<iostream>
#include<iomanip>
using namespace std;

struct Soda
{
   string name;
   float  price;
    int    inv;
};

void functInventory(Soda[],int);       //prototype

void functInventory(Soda drink[],int num)       //function definition
{
      if ( drink[num].inv = 0)
      cout << "SOLD OUT" <<endl;
}

int main()
{
    const int option = 5;
    string cola, rbeer, lemlime, grape, cream;

    int InsAmount, choice;
    int income = 0;

    Soda array[option] =    {
                            {cola,   .75, 20},
                            {rbeer,  .75, 20},
                            {lemlime,.75, 20},
                            {grape, .80,   20},
                            {cream, .80,   20}
                          }; 

     cout << "Please choose 1-6 " << endl;
     cout    << " 1. Cola = $.75 " << endl;
     cout  << " 2. Root Beer = $.75 "  << endl;
     cout << " 3. Lemon Lime = $.75 " << endl;
     cout  << " 4. Grape Soda = $.80 " << endl;
     cout << " 5. Cream Soda = $.80 " << endl;
     cout << " 6. QUIT & EXIT "       << endl;

  switch(choice)
     {
       case 1:   array[0].inv - 1 = array[0].inv;
                  income = income + .75;
                  functInventory(array, choice);
                  break;

       case 2:    array[1].inv - 1 = array[1].inv;
                  income = income + .75;
                  functInventory(array, choice);
                  break;

       case 3:    array[2].inv - 1 = array[2].inv;
                  income = income + .75;
                  functInventory(array, choice);
                  break;

       case 4:    array[3].inv - 1 = array[3].inv;
                  income = income + .80;
                  functInventory(array, choice);
                  break;

       case 5:    array[4].inv - 1 = array[4].inv;
                  functInventory(array, choice)
                  income = income + .80;
                  break;

       case 6:  cout << "The total amount earned is: $" << income <<endl;
                  break;

        default:
                cout <<  "Please enter a capital letter from 1-6 " << endl;
   }

     cout << "Please Tell Me How Much Money You Are Inserting:  " <<endl;
     cin  >> InsAmount;

     change = InsAmount - .75;        //I will work on creating a more accurate function 4 change
     cout << "your change is " << change; << "  "<< endl;
    return 0;

     }
4

2 に答える 2

1

ブラッドシェッドって言った?これは gcc に基づいていると思います: 警告をオンにします-W -Wall。これは、これはおそらくあなたが意図したことではないことを示しています。

if ( drink[num].inv = 0)

これは割り当てであり、比較ではありません。あなたはおそらく意味した

if (drink[num].inv == 0)

=...または、ロジックを台無しにする偶発的な事態を防ぐため

if (0 == drink[num].inv)

...割り当てを使用しようとすると、コンパイラエラーが発生するためです。他のエラーを確認していませんが、これは明らかなエラーのようです。最近の私の癖なので、 を使ってはいけないことも指摘しておきますstd::endl

コードをもう少し下に見ると、これはコンパイルすることさえできません。

array[0].inv - 1 = array[0].inv;

式の結果はarray[0].inv - 1一時的な組み込み型であり、この型に割り当てることはできないと思います (コードをコンパイルしようとすると確かに失敗します。コンパイルしようとすると、私が上で述べた問題)。

于 2012-11-18T01:40:37.047 に答える
0

コンパイラから得られるエラーは、おそらく次のようなものです。

test2.cpp:46:46: エラー: 代入の左オペランドとして左辺値が必要です

switch ステートメントでは、代入ステートメント (それぞれの場合の最初の行) の等号の右側ではなく左側に値があります。それは次のように言っているようなものです:

int my_age;
26 = my_age;

これはうまくいきません。変数は、ここでの左辺値です。

于 2012-11-18T01:49:12.877 に答える