所以到目前为止我已经这样做了。该程序适用于任何数量的客户。我可以通过更改变量NumOfCustomers
来更改客户数量。但我希望用户输入客户数量。当我通过执行NumOfCustomers=Num
来尝试这个时,它会给出一个NumOfCustomers必须具有常量值的错误。
有没有办法在不使用动态数组的情况下执行此操作?如果没有,那么请解释我的情况下如何使用动态数组,因为我发现它们很难理解。
#include <iostream>
void calculateCharges(int);
int main(){
int Num;
std::cout<<"Enter Number of customers: ";
std::cin>>Num;
calculateCharges(Num);
}
void calculateCharges(int Num){
const int NumOfCustomers = 3;
double hrs[NumOfCustomers], charges[NumOfCustomers];
double Total_hrs=0;
double Total_charges=0;
for(int i=0;i<NumOfCustomers;i++){
std::cout<<"Enter hours parked: ";
std::cin>>hrs[i];
}
for(int i =0;i<NumOfCustomers;i++){
if(hrs[i]<=3) charges[i]=2;
else if(hrs[i]>3) charges[i]=2+((hrs[i]-3)*.5);
if(charges[i]>10) charges[i]=10;
}
std::cout<<"Car\tHours\tCharge\n";
for(int i=0;i<NumOfCustomers;i++){
std::cout<<i+1<<"\t"<<hrs[i]<<"\t"<<charges[i]<<"\n";
}
for(int i=0;i<NumOfCustomers;i++){
Total_hrs += hrs[i];
Total_charges += charges[i];
}
std::cout<<"Total\t"<<Total_hrs<<"\t"<<Total_charges<<"\n";
}
答案 0 :(得分:2)
更改
double hrs[NumOfCustomers], charges[NumOfCustomers];
到
std::vector<double> hrs(NumOfCustomers), charges(NumOfCustomers);
其他一切都可以保持不变。您可能需要#include <vector>
。
检查std::cin>>hrs[i];
是否失败是个好主意,这样如果此人没有输入数字,您就不会出现奇怪的行为。
答案 1 :(得分:1)
这是修改过的程序。希望你喜欢!
#include <iostream>
void calculateCharges(int);
int main(){
int Num;
std::cout<<"Enter Number of customers: ";
std::cin>>Num;
calculateCharges(Num);
}
void calculateCharges(int Num){
int NumOfCustomers = Num;
double *hrs, *charges; // placeholder for dynamic array
hrs = new double[NumOfCustomers];
charges = new double[NumOfCustomers];
double Total_hrs=0;
double Total_charges=0;
for(int i=0;i<NumOfCustomers;i++){
std::cout<<"Enter hours parked: ";
std::cin>>hrs[i];
}
for(int i =0;i<NumOfCustomers;i++){
if(hrs[i]<=3) charges[i]=2;
else if(hrs[i]>3) charges[i]=2+((hrs[i]-3)*.5);
if(charges[i]>10) charges[i]=10;
}
std::cout<<"Car\tHours\tCharge\n";
for(int i=0;i<NumOfCustomers;i++){
std::cout<<i+1<<"\t"<<hrs[i]<<"\t"<<charges[i]<<"\n";
}
for(int i=0;i<NumOfCustomers;i++){
Total_hrs += hrs[i];
Total_charges += charges[i];
}
std::cout<<"Total\t"<<Total_hrs<<"\t"<<Total_charges<<"\n";
delete [] hrs;
delete [] charges;
}
答案 2 :(得分:1)
您可以使用std::vector
,这是一个可以启用高效可变长度数组的类,可以减轻您的手动分配(您仍然可以使用double hrs = new double[NumOfCustomers]; delete [] hrs
,但这需要手动内存管理而您不需要想要它。)
您甚至可以使用单个结构:
struct CustomerData {
double hrs;
double charges;
}
std::vector<CustomerData> data(NumOfCustomers);
..
std::for_each(data.begin(), data.end(), [](CustomerData &item) {
item.charges = std::min(10, item.hrs <= 3 ? 2 : 2 + ((item.hrs-3)*.5));
});
答案 3 :(得分:0)
您不能拥有可变宽度的数组。在编译期间应该知道数组大小。它们需要是常数或某些定义参数。
int a[10]
OR
`define A_SIZE 10
int a [A_SIZE]
std :: vector是一个STL容器,就像一个数组,但可以动态地改变它的大小。
对载体的参考。
答案 4 :(得分:0)
可以使用c ++完成一个简单的动态内存分配。让我展示一个有关动态内存分配的小片段。为指针变量分配一个带有 new 关键字的整数数组。然后删除内存分配完成所需的过程后。注意:动态内存分配使用堆内存部分。
#include <iostream>
using namespace std;
int main()
{
int size;
cout<<"enter ur array size "<<endl;
cin >> size;
int *ash;
ash = new int[size];
for (int i=0;i<size;i++){
cin >> ash[i];
}
for (int j=0;j<size;j++){
cout << ash[j]<<endl;
}
delete[] ash;
}