2016-09-09 1 views
0

그래서 여기에 클래스 정의가있는 Car를 작성한 다음 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입니다).

options 인수는 vector<string>이어야합니다.


그런 다음 다른 유사한 블록을 해당 기능에 대한 위탁 호출로 바꿉니다.


는 그 기능 Car의 멤버 함수를 만들 수있는 좋은 생각인가?

예를 들어, 어떻게 다음 GUI 프로그램 (그래픽 사용자 인터페이스)에 Car를 사용하여, 고려 번호.

+0

100K! 네가 해냈어! –

관련 문제