2

So I have done this so far. The program works fine for any number of customers. I can change the number of customers by changing the variable NumOfCustomers. But I want the user to input the number of customers. When I try this by doing NumOfCustomers=Num, it gives an error that NumOfCustomers must have a constant value.

Is there a way to do this without using dynamic arrays? If there isn't, then please explain how dynamic array can be used in my case, as I find them hard to understand.

#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"; } 
2
  • 8
    You mean like std::vector? Commented Jul 14, 2014 at 8:25
  • in c++ the array has no boundary till you have not assigned the memory to it. Commented Jul 14, 2014 at 8:43

5 Answers 5

3

Change

double hrs[NumOfCustomers], charges[NumOfCustomers]; 

to

std::vector<double> hrs(NumOfCustomers), charges(NumOfCustomers); 

Everything else can stay the same. You may need #include <vector>.

It would be a good idea to check std::cin>>hrs[i]; for failure so you don't get weird behaviour if the person doesn't type a number.

Sign up to request clarification or add additional context in comments.

Comments

1

Here's the modified program. Hope you like!

#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 Comments

Myabe it's code like this that makes the OP find dynamic arrays "hard to understand".
may be, I just made minimal changes on the program posted
1

You can use a std::vector, which is a class that enables efficient variable length arrays and relief you from manual allocation (you could still use double hrs = new double[NumOfCustomers]; delete [] hrs but this requires manual memory management and you don't want it.)

You can even use a single struct like:

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)); }); 

Comments

0

You cannot have arrays of variable width. Array size should be known during during compilation. Either they need to be constant or some define parameter.

int a[10] 

OR

`define A_SIZE 10 int a [A_SIZE] 

std::vector is a STL container that is like an array but can change its size dynamically.

Reference on vectors.

http://www.cplusplus.com/reference/vector/vector/

Comments

0

A simple dynamic memory allocation can be done using c++.Let me show a small snippet regarding dynamic mem allocation.A pointer variable is allocated an integer array with new keyword.Then the memory allocate is deleted after we have completed the required process. NOTE:Dynamic memory allocation uses heap memory part.

#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; } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.