이전글은 오직 배열로 스도쿠를 코딩 했는데 조금 응용해서 포인터 변수를 이용해보았다.
#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");
}
댓글 없음:
댓글 쓰기