0

申し分なく、完全に困惑している課題があります。これまでの私のコードは次のとおりです

#include<iostream>
#include<cstdlib>
#include<fstream>
#include<sstream>

using namespace std;

const int SIZE = 12;

struct Division
{
      char divName[SIZE]; // Division name
      double sales[4]; // Quarterly sales stored as an array
};



int main()
{
       void Intro();
       Division CreateCorporateFile();
       Division DisplayCorporateSales();

       Intro();
       CreateCorporateFile();
       DisplayCorporateSales();


       system("PAUSE");
       return 0;
}

void Intro()
{
     cout<<"This program will prompt you to enter in quarterly sales for "
           "four different\ndivisions of a company.\n\n";
}


Division CreateCorporateFile()
{
     Division div;
     int x = 0;
     //for(int x = 0; x < 4; x++)
 do {
          int quarter = 1;
          cout << "Enter the name of the division: ";
          cin >> div.divName;
          for(int i = 0; i < 4; i++)
          {
              cout << "Enter in the sales for quarter "<< quarter <<": ";
               cin >> div.sales[i];
               if(div.sales[i] > 0)
               {
                    quarter++;
               }
               else
               {
                    cout << "Sales are not allowed to be negative.\n";
               }
          }
          x++;
     } while(x < 4);

     return div;
}


Division DisplayCorporateSales()
{
         Division test;

         Division CreateCorporateFile();

         test = CreateCorporateFile();

         for(int i = 0; i < 4; i++)
         {
             cout << "Here are the quarterly sales for " << test.divName
              << ": ";
             for(int i = 0, quarter = 1; i < 4; ++i, ++quarter)
             {
                  cout << "Quarter "<< quarter << " sales: $"<< test.sales[i]
                   <<"\n";
             }
         }

         return test;

}

私が直面している問題の 1 つは、8 分割のプロンプトが表示されること (4 回だけ実行する必要があります) であり、もう 1 つは、8 番目の分割データのみを表示することです。誰が私が間違っているのか分かりますか?私はそうではなく、何時間も取り組んできたので、明らかな詳細を見落としている可能性があります.

4

2 に答える 2

1

最終的なデータのみを表示する理由Divisionは、単一のインスタンスCreateCorporateFileのみを返すためです。Division各 do-while ループは、前のループの内容を上書きします。

これに対する 1 つの解決策は、代わりに配列を返すことです。

std::vector<Division> CreateCorporateFile()
{
    std::vector<Division> divArray;
    Division div;
    int x = 0;
    do {
        ...
        divArray.push_back(div);
        x++;
    } while(x < 4);

    return divArray;
}

void DisplayCorporateSales()
{
    std::vector<Division> divisions = CreateCorporateFile();
    for (size_t i=0; i<divisions.size(); i++)
    {
        Division div = divisions[i];
        cout << "Here are the quarterly sales for " << div.divName
        << ": ";
        for(int j = 0, quarter = 1; j < 4; ++j, ++quarter)
        {
            cout << "Quarter "<< quarter << " sales: $"<< div.sales[j]
            <<"\n";
        }
    }
}
于 2012-12-17T10:44:14.180 に答える
0

最初の問題は、使用する関数をグローバル スコープ内ではなく main 内で宣言することによって発生します。 void Intro(); 部門 CreateCorporateFile(); 部門 DisplayCorporateSales();

i2 番目の問題は、ループごとに変数を 2 回使用したことが原因です。別の変数名を使用する必要があります (またはquarterループ変数として使用するだけです)。

于 2012-12-17T10:45:42.013 に答える