2016년 2월 6일 토요일

C언어로 스도쿠 만들기 2 : 포인터 활용

이전글은 오직 배열로 스도쿠를 코딩 했는데 조금 응용해서 포인터 변수를 이용해보았다.



#include<stdio.h>
int main()
{
    int i,j;
 int k=0;
 int A[9][9]= {
  {2,0,5,0,0,7,0,0,6},
  {4,0,0,9,6,0,0,2,0},
  {0,0,0,0,8,0,0,4,5},
  {9,8,0,0,7,4,0,0,0},
  {5,7,0,8,0,2,0,6,9},
  {0,0,0,6,3,0,0,5,7},
  {7,5,0,0,2,0,0,0,0},
  {0,6,0,0,5,1,0,0,2},
  {3,0,0,4,0,0,5,0,8}
 };
 int *AA= &A[0][0];   // 포인터 변수 선언 및 초기화
 int B[9][9] = {
  {2,3,5,1,4,7,9,8,6},
  {4,1,8,9,6,5,7,2,3},
  {6,9,7,2,8,3,1,4,5},
  {9,8,6,5,7,4,2,3,1},
  {5,7,3,8,1,2,4,6,9},
  {1,4,2,6,3,9,8,5,7},
  {7,5,9,3,2,8,6,1,4},
  {8,6,4,7,5,1,3,9,2},
  {3,2,1,4,9,6,5,7,8}
 };
 int *BB=&B[0][0];
 int c[9][9];
 int *CC=&c[0][0];

 printf("아래에 0에 들어가는 알맞는 자리를 입력하세요.\n");
 for(i=0;i<9;i++)
 {
  for(j=0;j<9;j++)
  {
   printf("%2d",*(AA+k));
   k++;
  }
  printf("\n");
 }
 mygoto :
 printf("스도쿠의 모든 숫자를 입력하세요\n");
 k=0;
 do{
  for(j=0;j<9;j++)
  {
  scanf("%d %d %d %d %d %d %d %d %d",&*(CC+k),&*(CC+k+1),&*(CC+k+2),&*(CC+k+3),&*(CC+k+4),&*(CC+k+5),&*(CC+k+6),&*(CC+k+7),&*(CC+k+8));  //*(CC+k) 는 메모리에 할당된 실제값을 의미한다.
  k+=9;
  }
k=0;
 for(i=0;i<9;i++)
 {
  for(j=0;j<9;j++)
  {
   if(*(CC+k) != *(BB+k))
   {
    printf("틀렸습니다. 다시 입력하세요 \n");
 goto mygoto;
   }
   k++;
  }
 }
 }while(*(CC+80) != *(BB+80));
 printf(" 정답! 게임종료\n");

}

댓글 없음:

댓글 쓰기