2016-09-09 16 views
0

ここで私はクラス定義を持っています。それからcarObjectを作成します。 carObjectのすべての変数の値を入力するようにします。あなたがここに見てきたように、私はユーザー入力を得ることができましたが、この問題に対する私のアプローチは、私の意見では非効率的です。C++でクラスオブジェクトの文字列変数を反復処理する方法は?

最初の入力を除いて、すべてのユーザー入力が非常に似ていることがわかりました。宣言文や文のブロックを繰り返し処理し、毎回変数を変更するために、ある種のループを使用したいと思います。ループの最初の繰り返しに対してのみ異なる入力を入力するif文を置いておきたいと思います。私はbashで変数名を表すために文字列変数を使うことができますが、C++で可能かどうかはわかりません。

オブジェクト名は変更されず、関連付けられている変数のみが変更されています。また、ユーザー入力にも同じ単語を使用します。これは、繰り返しを繰り返すたびに変更する必要があります。同様に名前が付けられた一連の配列もあります。これらの配列の目的は、特定の変数にどのようなオプションが使用できるかをユーザーに伝えることです。

私はこれまでのプログラミング経験はありますが、C++には比較的新しいものです。別の関数への呼び出しを含む、私の問題の解決策となるコードブロックは、私の目的に合っています。以下は私のコードです。

#include <iostream> 
    #include <string> 
    using namespace std; 

    class Car { 
    public: 

    string Name; 
    string Model; 
    string Color; 
    string Transmission; 
    string Category; 
    }; 

    int main() { 

    Car CarObject; 

    string modelOptions [3] = { "Ferrari", "Porsche", "Nissan" }; 
    string colorOptions [4] = { "Blue", "Red", "Green", "White" }; 
    string transmisionOptions [2] = { "Automatic", "Manual" }; 
    string categoryOptions [3] = { "A", "B", "C" }; 

    cout << "Enter " << "name" << " for Car 1." << endl; 
    cin >> carObject.Name; 
    cout << endl; 

cout << "Enter " << "model" << " for Car 1." << endl; 
cout << "Options are:"; 
for (const string &text: modelOptions) { 
    cout << " " << text; 
} 
cout << "." << endl; 
cin >> carObject.Model; 
cout << endl; 

cout << "Enter " << "color" << " for Car 1." << endl; 
cout << "Options are:"; 
for (const string &text: colorOptions) { 
    cout << " " << text; 
} 
cout << "." << endl; 
cin >> carObject.Color; 
cout << endl; 

cout << "Enter " << "transmission" << " for Car 1." << endl; 
cout << "Options are:"; 
for (const string &text: transmissionOptions) { 
    cout << " " << text; 
} 
cout << "." << endl; 
cin >> carObject.Transmission; 
cout << endl; 

cout << "Enter " << "category" << " for Car 1." << endl; 
cout << "Options are:"; 
for (const string &text: categoryOptions) { 
    cout << " " << text; 
} 
cout << "." << endl; 
cin >> carObject.Category; 
cout << endl; 

... 

return 0; 

} 
+1

ユーザーの入力を予測する方法が非常に似ているかどうか尋ねますか? –

+0

一般的な「フィールドのユーザー入力」コードブロックに対応する関数を定義します。そのパラメータにはオプションベクトルが含まれます。その結果は文字列です。 –

+0

「ユーザーの入力を予測する」とはどういう意味ですか?各「入力ブロック」内のforループは、それぞれの「options」配列を反復処理し、ユーザが入力できるすべてのオプションを表示します。 – Galaxy

答えて

0
void Car::InputParameter(string& param, const string &msg, const vector<string>& options) 
{ 
    cout << msg << endl; 

    for (const string &text: options) { 
      cout << " " << text; 
    } 

    cout << "." << endl; 

    cin >> param; 

    cout << endl; 
} 

私はあなたがこのような何かをしたいかもしれないと思います。あなたは各メンバーのためにそれを呼び出すだけです。

0

このコードブロック:

cout << "Enter " << "category" << " for Car 1." << endl; 
cout << "Options are:"; 
for (const string &text: categoryOptions) { 
    cout << " " << text; 
} 
cout << "." << endl; 
cin >> carObject.Category; 
cout << endl; 

&hellip。

carObject.Category = userInput("category", categoryOptions); 

明らかにそれはstringを返します(つまり、std::stringです):このような関数の呼び出しに置き換えることができます。

オプションの引数は、vector<string>にすることをお勧めします。


次に、他の同様のブロックを、その関数へのditto呼び出しで置き換えます。


その機能にCarのメンバ関数を作成することをお勧めしますか?

次いでGUIプログラム(グラフィカルユーザーインターフェイス)でCarを使用する方法、例えば、考えてみよう。

+0

100K!やった! –

関連する問題