2016-04-26 5 views
-2

私は、ユーザーが車の情報を追加するプロジェクトを作成しています、そして、利用可能なすべてのcars.Butを表示する1つの関数から車の名前をコピーすることはできませんここに別の配列に配列はコードです。クラスからの動的な文字配列は、適切な結果を印刷します

#include <fstream> 
#include <iostream> 
#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
using namespace std; 

const int SIZE=10; 

class car 
{ 
    public: 
int car_no=0; 
char car_name[SIZE][20]; 
char car_model[SIZE][20]; 
char car_colour[SIZE][20]; 
char reg_id[SIZE][20]; 
int rate_per_day[SIZE]; 
char cars_in_lot[SIZE][20]; 
}; 

addcar() 
{ 
    char choice; 
    do{ 

    car*newcar=new car; 

    cout<<"\t\t\t\t(->) Name : "; 
    cin>>newcar->car_name[newcar->car_no]; 
    strcpy(newcar->cars_in_lot[newcar->car_no],newcar->car_name[newcar->car_no]); 
    cout<<endl; 
    cout<<"\t\t\t\t(->) [email protected]!0n number : "; 
    cin>>newcar->reg_id[newcar->car_no]; 
    cout<<endl; 
    cout<<"\t\t\t\t(->) c0l0ur : "; 
    cin>>newcar->car_colour[newcar->car_no]; 
    cout<<endl; 
    cout<<"\t\t\t\t(->) Model : "; 
    cin>>newcar->car_model[newcar->car_no]; 
    cout<<endl; 
    cout<<"\t\t\t\t(->) Rate of Rent Per Day : "; 
    cin>>newcar->rate_per_day[newcar->car_no]; 
    newcar->car_no++; 
    cout<<"Want to add another car [y/n]"<<endl; 
    cin>>choice; 
    }while(choice == 'y' || choice == 'Y'); 

} 
void show_cars_in_lot() 
{ 
     cout<<"Avaialable Cars in Lot are : "<<endl; 
     car*newcar=new car; 
     for(int i=0;i<SIZE;i++) 
     cout<<i+1<<"\t"<<newcar->cars_in_lot[i]<<"\t"<<newcar->car_colour[i]  <<"\t"<<newcar->car_model[i]<<"\t"<<newcar->reg_id[i]<<endl; 
getch(); 
} 

void display1() 
    { 

cout<<"\t\t\t(1) Show Cars in Lot"<<endl; 
cout<<"\t\t\t(2) Add Cars"<<endl; 
}// end of display1 

int main() 
{ 
    char option; 
    int desire_car; 
do 
{ 
    int choice; 
    display1(); 
    cout<<"Enter Your Choice : "; 
    cin>>choice; 
    switch(choice) 
    { 
    case 1: 
     show_cars_in_lot();break; 
    case 2: 
     addcar();break; 
    default: 
    cout<<"You Entered Wrong Input"<<endl; 
    } 
cout<<"Go To Main Menu [y/n]";cin>>option; 
}while(option == 'y' || option == 'Y'); 

return 0; 
    } 
+5

あなたの人生を楽にするために 'std :: string'を使用してください。 –

+2

また、デバッガを使用して、さらに簡単にしてください。 – edmz

+0

あなたは別のオブジェクト( 'show * car_ new_car_in_lot()'中の 'car * newcar = new car;')から別のオブジェクト( 'car * newcar = new car;' 'addcar()')に車を追加します。 'new'は、新しいインスタンスにメモリを割り当てるためだけに使用してください。おそらく 'show_cars_in_lot()'で 'new'を使う必要はありません – kay27

答えて

0

データ構造を配列の単一の構造ではなく、車のプロパティのコンテナに変更することをお勧めします。

struct Car_Properties 
{ 
    public: 
    int   number; 
    std::string name; 
    std::string model; 
    std::string colour; 
    std::string reg_id; 
    int   rate_per_day; 
    std::string cars_in_lot; 
}; 
std::vector<Car_Properties> car_inventory; 
// Or 
Car_Properties car_lot[SIZE]; 

一般に、カープロパティ(1台の車用)はメモリ内で連続しているため、上記の方が効率的です。

注:std::vectorを使用する場合、new演算子を使用する必要はありません。 std::vectorはコピーを作成します。コピーコンストラクタと代入演算子を実装する必要があります。注意:また、オーバーロードオペレータ==<

編集1:動的
Car_Propertiesを作成する最も簡単な方法は、単に変数のインスタンスを宣言することです:

int main() 
{ 
    Car_Properties das_auto; // This creates an instance in local memory. 
    //... 
    return EXIT_SUCCESS; 
} 

ファイルからの車のプロパティを読みたい場合は、あなたがオーバーロードすることができます

struct Car_Properties 
{ 
    public: 
    void load_by_prompting(std::istream& input, 
          std::ostream& output); 
    //... 
} 

void 
Car_Properties :: 
load_by_prompting(std::istream& input, 
        std::ostream& output) 
{ 
    output << "Enter car number: "; 
    input >> number; 
    output << "Enter car name: "; 
    std::getline(input, name); 
    // ... 
} 

int main() 
{ 
    Car_Properties das_auto; 

    // Input data into the variable 
    das_auto.load_by_prompting(std::cin, std::cout); 

    return EXIT_SUCCESS; 
} 
+0

どうすれば車のオブジェクトを動的に作ることができるのですか? –

+0

@AhsanAli:私の編集1を参照してください。 –

関連する問題