2013-11-02 4 views
0

나는 C 프로그램에서 일하고 있는데 문제가 생겼다. I이반복을 통해 정의

#define NUMBER_OF_OPTIONS 5 

#define NAME_OPTION1 "Partida Rapida" 
#define NAME_OPTION2 "Elige Nivel" 
#define NAME_OPTION3 "Ranking" 
#define NAME_OPTION4 "Creditos" 
#define NAME_OPTION5 "Exit" 


for (iterator = 1; iterator <= NUMBER_OF_OPTIONS; iterator++){ 

    menu_options[iterator-1]= NAME_OPTION + iterator 
} 

는 I 변수 "이터레이터는"하나와 동일한 경우 "NAME_OPTION + 반복기는"예를 들어 해당 #define.의 값을 취하는 것을 할 가지고, I는 NAME_OPTION1의 값을 취할 menu_options[iterator-1] 원하는 "Partida Rapida".

어떻게받을 수 있습니까?

답변

2

당신은이 같은 정의를 사용할 수 없습니다, 당신은 할 수 있습니다 :

const char *menu_options[5] = { 
    "Partida Rapida", 
    "Elige Nivel", 
    "Ranking", 
    "Creditos", 
    "Exit" 
}; 
3

기본적으로, 당신은 할 수 없습니다. #define 매크로는 C 전처리기에 의해 처리되고 해당 매크로가 코드에 나타날 때 대체 텍스트 텍스트 대체를 수행합니다. NAME_OPTION 매크로가 정의되지 않았으므로 컴파일러가 불평해야합니다. C는 문자열, 특히 기호에 숫자를 추가하는 것을 허용하지 않습니다. NAME_OPTION.const char*의 배열을 사용합니다. 그런 다음 이터레이터를 참조 할 수 있습니다.

1

#define 매크로를 사용하면 코드가 기계어 코드로 컴파일되기 전에 정의 된 단어의 모든 항목을 다른 것으로 대체하도록 전 처리기에 지시합니다. 이 경우 NUMBER_OF_OPTIONS은 (는) 5로 바뀌지 만 NAME_OPTION *이 (가) 나타나지 않으므로 바꿀 내용이 없으며 사전 처리 중에 오류가 발생할 수 있습니다.

Piere의 솔루션은이를 수행하는 방법을 보여 주지만 char * 배열에 대한 반복자가 의심 스럽기 때문에 정수 인덱스를 사용하여 주어진 배열을 반복해야합니다.

+0

당신의 대답을 모두 고맙지 만 "나는 char * 배열에 대한 반복자가 의심스러워서 정수형 인덱스를 가진 배열을 반복해야한다"라고 말하면 무슨 뜻인지 이해할 수 없었다. – Aldridge1991

+0

Iterator는 클래스이다 당신은 주어진 STL 컨테이너를 통해 "반복"할 수 있습니다 (C++). iterator를 반복 할 때 iterator는 주어진 컨테이너의 객체 하나를 정확하게 나타냅니다. 따라서, 당신이 container.begin()과 같은 것을하면 iterator 타입의 객체를 반환 할 것이고 그 객체는 주어진 컨테이너의 첫 번째 아이템을 나타낼 것입니다. 나는 당신을 혼란스럽게하고 싶지 않다. 그래서 내가 위에서 기술 한 것들을 모른다면 (또는 당신은 기본 배열을 반복하려고한다). 위에 쓴 것처럼 for 루프를 사용하십시오. iterator는 정수 인덱스가 아닌 반복자 클래스를 의미합니다. 나는 그것이 지금 분명하기를 바란다. – vanomart

관련 문제