2013-05-10 2 views
2

저는 프로그래밍에 익숙하지 않고 키패드의 키를 눌렀을 때 화면에 인쇄하려고합니다. 나는 눌려진 키의 행과 열 번호를 인쇄하는 무대에 프로그램을 가지고있다. 16 개의 키 문자를 모두 포함하는 배열을 선언 할 수 있다면 행과 열 번호로 배열의 인덱스를 작성할 수 있습니다. 여기에 나의 미약 한 시도가있다.문자열 배열 선언 및 단일 문자 선택

char key[4]; 
strcpy(key[0], "CD.Z"); 
strcpy(key[1], "89AB"); 
strcpy(key[2], "4567"); 
strcpy(key[3], "0123"); 

...

printf("The key pressed was %c", key[colnum][rownum]); 
+1

'문자 키 [4]'---> '문자 키 [4] [5]' – BLUEPIXY

+5

또는'문자 * 키 [4] = { "CD.Z", "89AB", "4567", "0123"}; ' – BLUEPIXY

+0

@BLUEPIXY 그건 실수 였어.도와 주셔서 감사합니다. – Marmstrong

답변

4

바와 같이 코멘트에 @BLUEPIXY 지적, 당신의 유형은 잘못이다. 위의 keys 배열로 선언

const char *keys[] = { "CD.Z", "89AB", "4567", "0123" }; 

:

또한, 주위 문자를 복사하는 런타임 strcpy()를 사용하여 아무 문제가 없습니다, 당신은 단지 문자열 배열을 설정하는 컴파일 시간 이니셜 라이저를 사용할 수 있습니다 char *은 C의 "문자열 유형"입니다 (사실 "문자에 대한 포인터"만 의미하지만 문자열에 일반적으로 사용됨). 배열에 길이가 지정되지 않으면 컴파일러는 =의 오른쪽에있는 이니셜 라이저 식을 기반으로 컴파일러를 자동으로 계산합니다.

그래서,이 같은 색인 :

printf("keys[2] is '%s'\n", keys[2]); 

당신에게 3 요소 (0에서 C 인덱스 배열)를 얻을 것이다. 포인터가 아니라 색인 할 수

때문에, 당신은 할 수 있습니다 :

printf("second char of '%s' is '%c'\n", keys[2], keys[2][1]); 

여기, keys[2][1] 수단 "먼저 그 배열의 두번째 요소를 얻을의 keys 배열에서 3 요소를 얻을". 이것은 문자 포인터를 (인덱스 연산자 인 []을 사용하여) 배열로 취급하지만 C에서는 괜찮습니다. 모든 포인터는 이와 같은 배열로 처리 될 수 있습니다.

2

이 코드는 컴파일되지해야합니다. char 배열을 char에 복사하려고했습니다. 컴파일러에서 오류를 내야합니다.

이 버전으로 수정하십시오.

char key[4][5]; 
strcpy(key[0], "CD.Z"); 
strcpy(key[1], "89AB"); 
strcpy(key[2], "4567"); 
strcpy(key[3], "0123"); 
0

당신이 당신을 도울 수

c = getchar(); 
for(i=0;i<4;i++) 
{ 
    for(j=0;j<4;j++) 
    { 
     if(keys[i][j]==c) 
     { 
      printf("Key of Row %d and Column %d was pressed",i+1,j+1); 
     } 
    } 
} 

으로 행과 열 번호를 표시 할 수 있습니다 키를 누른 후

char *keys[] = { "CD.Z", "89AB", "4567", "0123" }; 

처럼 문자 배열을 정의합니다.

0
key[0] 

은 4자를 보유하고있는 동안 하나의 문자 만 저장할 수 있음을 의미합니다. 이를 위해, 당신은 다음과 같이 선언해야합니다

char key[4][5]= {"CD.Z", "89AB", "4567", "0123"};