2017-01-31 1 views
2

Im은 여러 변수가있는 C++ 프로그램을 만듭니다. var1, var2, var3, var4;변수를이 방법으로 사용하는 방법 C++

내가 좋아하는 for 루프를 위해 그것을 사용하려는 :

for(int x; x<=5; x++){ 
if(var1==1){cout << "hi";} 
} 

하지만 그 대신 VAR1을 입력하는 난이 x는 내 배치 프로그램에서 기억 1. 같다 "x"를 VAR 만들고 싶어 일 (정확하지 않음) 나는 이것을 사용할 수 있습니다 :

set x=1 
echo var%x% 

그러면 출력은 var1이됩니다.

+5

당신이 할 수있는 ' C++에서 이와 같은 변수 이름을 생성하십시오. 'int's의 ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector)를 원할 것입니다. 다음과 같이 접근 할 수 있습니다 :'myInts [x]' . – BoBTFish

+4

for 루프는'x'를 초기화하지 않으므로 잘 작동하지 않습니다. –

+3

(SOLVED)를 추가하지 말고 "thank you"의견을 게시하지 마십시오. 대신, upvote하고 당신을 도운 대답을 받아들입니다. –

답변

0

많은 스크립트 프로그래밍에서 가능하지만 불행히도 C++에서는 직접적인 지원이 없습니다.

가능한 경우 배열 사용 또는 실제 변수에 대한 포인터 배열이 있습니다.

int vars[5] = {...}; 
for(int x = 0; x < 5; x++){ 
    if(var[x]==1){cout << "hi";} 
} 

또는

int var0 = 2, var1 = 42, var2 = 7; 
int *const pvars[] = {&var0, &var1, &var2}; 

for(int x = 0; x < 3; x++) { 
    if(*(pvars[x]) == 1) 
    { 
     cout << "hi"; 
    } 
} 

또는

this comment

int var0 = 2, var1 = 42, var2 = 7; 

for(auto &var = {var0, var1, var2}) { 
    if(var == 1) 
    { 
     cout << "hi"; 
    } 
} 
+1

메신저 아직도 학생이기 때문에 실제로 배열에 대해 잊어 버렸습니다! 감사합니다! –

+1

또는 (for C++ 11)'for (int var : {var0, var1, var2}) {if (var == 1) {std :: cout << "hi"; }}'. – Jarod42

0

에서 언급 한 바와 같이 당신은 매크로를 사용하여이 작업을 수행 할 수 있습니다,하지만 난 정말 좋은 아이디어라고 생각하지 않습니다. 대신 배열을 사용하지 않는 이유는 무엇입니까? 배열을 사용하면 원하는 인덱스를 참조 할 수 있으므로 var1 대신 var2, var3 등이됩니다. var[0], var[1], var[2] 등이됩니다 ... 어쨌든 훨씬 더 많은 C++가 있습니다.

배열을 사용하는 경우또는 std::array과 같은 C++ 제안 컨테이너 클래스 중 하나에서 생각하는 것이 좋습니다. 벡터에 정수 변수의 간단한 배열을 갖기 위해서는 std::vector<int> intVec과 같이 선언하고, intVec.at(0)과 같은 첫 번째 요소를 추출하는 at 함수를 사용하여 특정 요소를 추출하십시오. 거의 모든 다른 접근 방법을 매크로보다 많이 사용하십시오. 여기에 변수를 전달하여 그래서 루프를 사용하여,

#define var(x) var##x 

var(1) = 2; // resolves to var1 = 2; 

매크로 그러나 컴파일 시간은 다음과 같습니다

는이 같은 매크로를 만들 필요가있을 것이다, 매크로에서 그것을 할 것을 미루어 , 당신이 기대하는대로 작동하지 않습니다. 그래서 int x = 1; var(x) = 2;를 호출하면 2 var1 설정이 아니라, 또 다른 코드 이상의 오류가 발생하기 쉬운하고있다 varx

매크로 솔루션은 하나가 당신의 적은 읽기를하고, 단점의 번호와 함께 제공 2로 설정하려고하지 것이다 마지막으로, 왜 "C++ way"에서 멀어 지나요?

+0

하지만 그는 매크로가 (var (i))가 무엇인지 모르기 때문에 루프가 중복되므로'var (0), var (1), var (2)'를 명시 적으로 작성해야합니다. – Raindrop7

+0

@ Raindrop7 또한 예제의 첫 번째 단락에 명시된 바와 같이 :) –

0

프로그램 실행 파일을 호출하는 동안 명령 줄 인수를 사용할 수 있습니다.

prog.exe 3 4 1 6 

이렇게하면 프로그램은 5 개의 명령 줄 인수를받습니다. 첫 번째는 프로그램 이름 자체입니다.

코드는 다음과 같이 표시됩니다

int main(int argc, char *argv[]) { 
    // For the above example, argc = 5 
    for (int i = 1; i < argc; ++i) { 
     // make use of argv[i] 
    } 
} 

이 정확하게 당신이 원하는 것을 할 수 있지만, 여러 변수에 대한 당신의 생각을 확인하지 않을 수 있습니다 VAR1 즉, 변수는 argv [1]

관련 문제