~cpp #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> void make_number(char *p); /* 임의 세자리 숫자를 생성하는 함수 */ void check_num(char *dest, char *src); /* 입력된 숫자와 비밀숫자를 맞춰보는 함수 */ void main() { char hidden_num[3] = {'\0',}; char number_log[10][4] = {'\0',}; int i; char num[3]; clrscr(); // make hidden_number; make_number(hidden_num); for (i=0; i<10; i++) { printf("%d input number : ", i+1); scanf("%s", &num); if (num[0] == num[1] || num[0] == num[2] || num[1] == num[2]) { printf(" 중복된 숫자를 입력하시면 안됩니다. 다시 입력해주세요.\n"); i--; } else strncpy(number_log[i], num, 3); //printf("%d : %s\n", i, number_log[i]); check_num(number_log[i], hidden_num); } printf("You lose~\nThe answer is %c%c%c", hidden_num[0], hidden_num[1], hidden_num[2]); } void make_number(char *p) { int number[3]; int i, temp_i, num, j; randomize(); printf("Make number..\n"); for(i=0; i<3; i++) { temp_i=i; num = rand() % 10; if (i<1) number[i] = num; else for (j=0; j<temp_i; j++) if (number[j]==num) i--; else number[i] = num; p[i] = (char) number[i] + 48; } //printf("%c %c %c \n", p[0], p[1], p[2]); //printf("%d %d %d \n", number[0], number[1], number[2]); } void check_num(char *dest_num, char *src_num) { int i, j, k; int strike = 0; int ball = 0; for (i=0; i<3 ;i++ ) { for (j=0; j<3 ;j++ ) { if (dest_num[i] == src_num[j]) if (i == j) strike++; else ball++; } } if (strike == 3) { printf("You win~!!\n"); exit(-1); } else if (strike == 0 && ball == 0) printf("out!!\n"); else printf("%dstrike %dball\n", strike, ball); } /* 지화니네 집에서 할일없이 뒹굴거리다가 ZeroWiki에서 보고 함 해봤음 --v 음.. 근데 역시 플밍을 안하다가 하니까 이것도 어렵넹.. 이것저것 해봐야겠당~ editplus 사용해도 꽤 괜찮넹.. 답답한 도스환경에서 해방~ 근데 스팩이 좀 이상한거 아닌가.. 중복된 숫자가 나오면 풀 수 있는건가? --a ex) 223 이라고 나오면 쉽게 풀 수 있을까? 흐음.. */