2017-01-08 2 views
0

체스 조각을 넣을 수있는 NxN 크기의 매트릭스가 있습니다 (N은 2 ~ 10 사이의 숫자 임). 하나의 필드를 하나만 넣을 수 있습니다. 프로그램은 테이블 크기를 묻고 다음과 같이 체스 조각 위치를 묻습니다.
1 편 : B2
2 편 : C5
3. 조각 : D2
... 사용자가 'X'를 입력하여 루프를 종료 할 수있는 마지막 조각 후
.여러 값을 스캔하여 배열에 추가하는 방법은 무엇입니까?

char inputPosition(char position[]) { 
    int i = 0; 
    do { 
     printf("%d. piece: ", i+1); 
     scanf("%s", &position[i]); 
     i++; 
    }while(position[i-1]!='x'); 
    return position; 
} 

출력 외모 : 내가 사용하려고이 함수의 코드가

char position[100] = {B2C5D2} 

:

내 문제는 내가 이런 하나 개의 배열에 모든 데이터를 입력해야한다는 것입니다 이런 식으로 : (B2C5D2 용)

BCDx 

나는 scanf를 사용해야하며 프로그램은 val을 가져서는 안된다. ue x를 매개 변수로 사용하지만 무엇을해야할지 모르겠습니다.

편집 : 예에서 위치가 유효한지 여부는 중요하지 않습니다. 또한 char 위치의 최대 입력을 편집했습니다. (내가 사용해야하는 최대 변수는 약 10입니다.) 제 실제 문제는 모든 위치를 공백없이 하나의 배열에 넣을 수 없다는 것입니다.

+1

읽을 필요가 없습니다 '& position [2 * i]'에 넣으시겠습니까? 그리고'% s' 대신에''% 2c "'를 사용하지 않는 한, 20 문자 배열로 9 개의 위치 만 저장할 수 있습니다. 당신은 여전히 ​​위치에 10 쌍의 문자가있는 null로 끝나는 문자열을 갖고 있지 않습니다. 또한 해당 직위가 유효한지 확인하지 않았습니다. –

답변

2

입력 항목 당 2자를 허용하려면 배열의 위치를 ​​오프셋해야하므로 scanf()의 인수로 &position[2*i]을 사용하십시오.

배열의 크기를 코드에 알려주고 배열의 오버플로를 방지하려면 (끝에서 인덱싱하거나 합계보다 많은 문자를 허용하는 것이 좋습니다).

한 가지 가능한 솔루션입니다 :

#include <stdio.h> 

static void inputPosition(int pos_size, char position[pos_size]) 
{ 
    for (int i = 0; i < pos_size/2; i++) 
    { 
     printf("%d. piece: ", i + 1); 
     scanf("%2s", &position[2 * i]); 
     if (position[2 * i] == 'x') 
     { 
      position[2 * i] = '\0'; 
      break; 
     } 
    } 
} 

int main(void) 
{ 
    char position[21]; 

    inputPosition(sizeof(position), position); 
    printf("Position: [%s]\n", position); 
    return 0; 
} 

그리고 샘플 실행 수율 :

1. piece: B2 
2. piece: C5 
3. piece: D2 
4. piece: A1 
5. piece: E3 
6. piece: F8 
7. piece: H8 
8. piece: A3 
9. piece: D4 
10. piece: E2 
Position: [B2C5D2A1E3F8H8A3D4E2] 

조기 종료 또 다른 샘플 실행은 다음과 같습니다

1. piece: B2 
2. piece: C5 
3. piece: D2 
4. piece: x 
Position: [B2C5D2] 
+0

고마워, 조나단, 너 정말 나를 도와 줬어! – 2b1c

관련 문제