2014-12-12 3 views
1

반복되는 코드를 피하고 질문을 쉽게 관리하기 위해 일련의 Q & A를 반복합니다.C++ - getline에서 변수 이름으로 변수 사용

string nameOfUser, nameOfCourse; // define 

string varNames [] = { nameOfUser, nameOfCourse }; 
string varDesc [] = { "Please enter your name:", "Please enter the course name:" }; 

for (int i = 0; i < 2; i++) 
{ 
    cout << varDesc[i] << endl; 
    getline(cin, varNames[i]); 
    cout << endl; 
} 

위의 코드는 궁극적으로 사용자의 입력에서 아무것도 생산 : 그 예를 볼 때까지

훨씬 더 내가 말할 수있는 것은 아닙니다.

에 배열 varNames을 반복하는 데 문제가 있다고 생각합니다. 그것은 마치 varNames[i]이 변수 이름 그 자체라고 생각하는 것처럼 보입니다 - 나는 초기에 그것이 반복 될 때 상응하는 값을 출력한다고 가정 했었지만, 분명히 그렇지 않습니다.

단순히 변수 이름을 변수 이름으로 사용하는 것이 가능합니까 아니면 getline의 관점에서 불가능합니까?

저는 '변수 변수 이름'에 대해 정확히 생각하지 않습니다. (C++에서 불가능하다는 것을 알고 있습니다.) 루프를 볼 때 varNames 배열의 값을 사용할 수 있어야합니다.

+0

무엇이'nameOfUser'입니까? 당신은 그것을 보여주지 않으며, 당신의 코드는 그것없이 컴파일되지 않을 것입니다. –

+0

@ John Zwinck이 프로그램의 앞 부분에서 정의 했으므로 예제에 포함시켜 명확하게 설명하겠습니다. –

답변

3

, 변수 이름은 소스 코드에 존재를; 일단 프로그램이 실행되면 사라집니다. 따라서 저장된 변수 이름을 사용하여 C++에서 실제 변수에 액세스하는 것은 불가능합니다.

그러나 비슷한 동작을 얻기 위해이 같은 배열로 포인터를 넣을 수 있습니다 : 여기

string nameOfUser, nameOfCourse; 

string * p[2] = {&nameOfUser, &nameOfCourse}; 

for (int i=0; i<2; i++) { 

    cout << varDesc[i] << endl; 
    getline(cin, *(p[i])); 
    cout << endl; 

} 

p 오히려 자신의 이름이 아닌, 자신의 메모리 주소로 변수를 참조합니다.

2

은이 라인을 따라 상기 C++지도 데이터 구조 이상적인 사용 사례이다

std::map<std::string,std::string> myMap; 

첫번째 스트링은 "변수 이름"및 사용자에 의해 제 2의 값을 입력 할 것이다.

이 할 수있는 방법에 대해 다음 프로그램을 참조하십시오

++ C에서
#include <iostream> 
#include <map> 
#include <string> 

int main (void) 
{ 
    std::map<std::string,std::string> vars; 
    std::string entry, varNames[] = {"name of user", "name of course" }; 
    for (int i = 0; i < sizeof(varNames)/sizeof(varNames[0]); i++) { 
     std::cout << "Enter " << varNames[i] << ": "; 
     std::getline(std::cin, entry); 
     vars[varNames[i]] = entry; 
    } 

    std::cout << "Name : " << vars[varNames[0]] << '\n'; 
    std::cout << "Course: " << vars[varNames[1]] << '\n'; 

    return 0; 
} 
관련 문제