我必须做作业。它是控制台应用程序,它使用一系列结构来保存有关计算机的信息(品牌,制造年份,重量和库存数量)。所以我编写了一个完全正常工作的程序,但我想使用动态数组,因为我不知道用户将输入多少条记录。
有没有办法做到这一点。要在数组中添加新记录,直到用户说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;
}
答案 0 :(得分:1)
是。而不是你的阵列,使用
std::vector<ComputerInfo> computerArray;
您可以根据需要添加任意数量的对象:
ComputerInfo c;
// read the data
computerArray.push_back(c);
现在,computerArray[0]
将获得c
中的信息。
您需要#include <vector>
。
此外,您可以使用char computerMark[20]
代替std::string
。
答案 1 :(得分:0)
您有两种选择:
1)使用std::vector
而不是数组。这是一个非常强大的工具,当然值得学习如何使用。
2)动态分配数组并在添加更多项目时调整其大小。基本上这意味着编写自己的std::vector
版本。这是加强编程技巧的好方法。您将学习编写标准类和函数的内容。但是,我建议在更严肃的编程中使用std::vector
,因为它已经过彻底的测试和调试。