2011-02-09 4 views
0

좋아요, 그래서 9 개의 정수 배열이 있습니다. 일부 값은 일부 주어지고 일부는 알려지지 않습니다. 알 수없는 값에 'a'- 'z'와 같은 정수 변수를 어떻게 할당할까요? 예를 들어 :배열에서 알 수없는 값을 변수에 할당

index [0] is unknown 
index [1] is 27 
index [2] is 6 
index [3] is 9 
index [4] is unknown 
index [5] is 21 
index [6] is 24 
index [7] is 3 
index [8] is unknown 

나는이 유형 int의 배열 불가능

index [0] is a 
index [1] is 27 
index [2] is 6 
index [3] is 9 
index [4] is b 
index [5] is 21 
index [6] is 24 
index [7] is 3 
index [8] is c 






    for (ii=0; ii<MAXLINE/2; ii++) 
    { 
    if (uniqueNumbers[ii] == UNKNOWN_INPUT) 
    { 

     printf("UNKOWN_INPUT at [%d]\n", ii); 
    } 
    } 
+3

어떻게 알 수 있습니까? 0 아닌가요? –

+4

배열은 동일한 유형의 요소를 보유한 인덱싱 된 데이터 구조입니다. 배열이'int'와'char'의 조합을 가지는 이유는 무엇입니까? – Mahesh

+0

알 수없는 값은 -1 – foo

답변

0

음수 값 (-1로 표시하지 않음)을 사용하는 것처럼 보이지 않으므로 문자의 음수 ASCII 값을 사용하여이 정보를 저장할 수 있습니다.

index [0] is a (-97) 
index [1] is 27 
index [2] is 6 
index [3] is 9 
index [4] is b (-98) 
index [5] is 21 
index [6] is 24 
index [7] is 3 
index [8] is c (-99) 

인쇄 할 때 (char)(-1 * index[i])을 사용하십시오.

1

를 원한다. intchar의 작은 struct을 정의하고 그 배열을 만들어야합니다. 그렇게하지 않으면 당신은 value의 값 또는 편지를 알고있는 경우

struct values { 
    int value; 
    char variable; 
}; 

그럼 당신은 variable에 임의의 문자 (예를 들어 ' ')를 할당 것입니다.

variable' ' (또는 사용자가 정의한대로)으로 설정된 경우 value 값을 읽으십시오. 그렇지 않으면 알 수없는 것으로 처리하십시오.

+1

논리에 동의하지만 노동 조합이 여기에 더 적합하지 않습니까? – templatetypedef

+0

그래, 나는 비교적 간단하게 유지하려고 노력했다. – Argote

3

위대한 질문입니다. C에서이 작업을 수행하는 직접적인 방법은 없습니다. 유형 시스템은 약한 반면에 각 변수에 대해 유형을 선택하도록 강요합니다. 즉, 일부 추가 구조가 없으면 배열 요소를 가질 수 없으므로 int 또는 변수에 대한 참조 이 작업을 수행하는

한 가지 방법은이 하나, 배열 요소마다 수 태그가 노동 조합을하는 것입니다 :

typedef struct { 
    enum { Constant, Variable } type; 
    union { 
     int value; // If this is a constant 
     int* ref; // If this is a reference to a variable 
    } value; 
} Expression; 

지금, 당신의 배열 요소가 될 수 있습니다 (이 값 필드는 상수 set) 또는 Variable 인 경우 ref 필드는 값을 보유하고있는 실제 변수에 대한 포인터가됩니다.

이것이 원하는 것이 아니라면 쉽게 수정할 수 있습니다. 하드 참조 대신 기호 참조를 저장하려는 경우 (예 : "다른 값에 대한 포인터"대신 "변수 X"라는 항목을 저장하려면) 다른 열거 형 상수와 필드 이름을 포함하는 필드를 추가 할 수 있습니다 변하기 쉬운.

+1

아쉽게도 익명의 노조는 C99에 없습니다. http://stackoverflow.com/questions/3228104/anonymous-union-within-struct-not-in-c99 –

+0

@ larsmans- 고마워! 나는 그것을 몰랐다. 답변이 업데이트되었습니다. – templatetypedef

1

Argote의 답변 @에 확장, 세정 용액 빠른 해킹 변수로 -'z' 통해 -'a' 값을 사용하는 것이다

struct Value { 
    union { 
     char var; 
     int i; 
    } v; 
    bool value_known; 
}; 

의 배열을 사용하는 것이다. 값이 항상 부정적이지 않으면 작동합니다.

0

원하는 값이 -1 인 문자를 인쇄하려면 출력 루틴에이 코드에 대한 지원을 제공해야합니다.

관련 문제