3

私は宿題をしなければなりません。これは、コンピューターに関する情報 (ブランド、製造年、重量、在庫数) を保持する構造体の配列を使用するコンソール アプリケーションです。したがって、完全に機能するプログラムを作成しましたが、ユーザーが入力するレコードの数がわからないため、動的配列を使用したいと考えています。

これを行う方法はありますか。ユーザーが n/N と言うまで新しいレコードを配列に追加するには? 助言がありますか?

これは私のバージョンのプログラムです:

#include "stdafx.h"
#include <iostream>

using namespace std;

struct ComputerInfo
{
    char computerMark[20], invertarNumber[6];
    unsigned int year;
    float weight;
};

ComputerInfo computerArray[300];

ComputerInfo AddComputers(ComputerInfo compterArray[], int counter)
{
    cout << "Enter mark of the computer: ";
    cin >> computerArray[counter].computerMark;

    cout << "Enter year of establish: ";
    cin>> computerArray[counter].year;

    while ((computerArray[counter].year < 1973)
        || (computerArray[counter].year > 2013))
    {
        cout << "INVALID YEAR!!!" << endl;

        cout << "Enter year of establish: ";
        cin>> computerArray[counter].year;
    }

    cout << "Enter computer weidth: ";
    cin >> computerArray[counter].weight;

    cout << "Enter computer invertar number(up to six digits): ";
    cin >> computerArray[counter].invertarNumber;

    return computerArray[counter];
}

void ShowRecords()
{
    int counter = 0;

    while (computerArray[counter].year != 0)
    {
        cout << "Mark: " << computerArray[counter].computerMark << endl;
        cout << "Year: " << computerArray[counter].year << endl;
        cout << "Weidth: " << computerArray[counter].weight << endl;
        cout << "Inv. number: " << computerArray[counter].invertarNumber << endl << endl;

        counter++;
    }
}

void MoreThanTenYearsOld(ComputerInfo computerArray[])
{
    int counter = 0;
    float counterOldComputers = 0;
    float computerPer = 0;

    while (computerArray[counter].year == 0)
    {
        if (computerArray[counter].year <= 2003)
        {
            counterOldComputers++;
        }

        counter++;
    }

    computerPer = counterOldComputers / 3;

    cout << endl;
    cout << "Percantage of old computers is: " << computerPer << endl;
}

int main()
{
    int counter = 0;
    float computerPer = 0;
    char answer = 'y';

    for (int i = 0; i <= 299; i++)
    {
        strcpy(computerArray[i].computerMark,"");
    }

    while((answer == 'Y') || (answer == 'y'))
    {
        computerArray[counter] = AddComputers(computerArray, counter);
        cout << endl;
        cout << "Do you want to enter more records (Y/N): ";
        cin >> answer;
        cout << endl;
        counter++;
    }

    MoreThanTenYearsOld(computerArray);

    return 0;
}
4

2 に答える 2

1

はい。配列の代わりに、使用します

std::vector<ComputerInfo> computerArray;

必要な数のオブジェクトを追加できます。

ComputerInfo c;
// read the data
computerArray.push_back(c);

これで、computerArray[0]に情報が含まれcます。

する必要があります#include <vector>

また、代わりにchar computerMark[20]を使用できますstd::string

于 2012-09-10T13:33:51.273 に答える
0

次の 2 つのオプションがあります。

1)std::vector配列の代わりに使用します。これは非常に強力なツールであり、使い方を学ぶ価値があります。

2) 配列を動的に割り当て、アイテムを追加するにつれてサイズを変更します。基本的にこれは、独自のバージョンの を作成することを意味しますstd::vector。これは、プログラミングスキルを強化する良い方法です。標準クラスと関数の作成に何が必要かを学びます。std::vectorただし、すでに徹底的にテストおよびデバッグされているため、より本格的なプログラミングで使用することをお勧めします。

于 2012-09-10T13:40:35.160 に答える