일단 40*40으로 맨첨에 출력은 잘되는데요..
3개를 중간쯤에 있는문자로 골라서 하면 잘되는데요 끝에부분을 입력하면
40*40을 넘어서 출력하는데요.. 어떻게 40*40안에서만 고를수 있게해야하는지 잘 모르겠어요..
#include <stdio.h> #include <Windows.h> #include "consolemodule.h" #include <conio.h> /// 알파벳 무작위로 40*40 출력후 /// 무작위로 출력된 알파벳안에서 입력 3글자를 받아서 일치하는 프로그램 /// by_m.s Ver.0 char YourWord[40][40] = { 0 }; void InitializeRandomSeed() { srand((unsigned int)time(0)); } char GetRandomCharacter() { return 'a' + (rand() % 26); } int main() { HANDLE hOP; hOP = GetStdHandle(STD_OUTPUT_HANDLE); if (hOP == INVALID_HANDLE_VALUE) { printf("Err, INVALID_HANDLE_VALUE\n"); return; } char MyWord[4]; int i; // y int j; // x system("mode con cols=120 lines=40"); InitializeRandomSeed(); for (i = 0; i < 40; i++) { for (j = 0; j < 40; j++) { YourWord[i][j] = GetRandomCharacter(); printf("%c", YourWord[i][j]); } printf("\n"); } printf("\n"); printf("Input Word : "); scanf_s("%s", MyWord, sizeof(MyWord)); for (i = 0; i < 40; i++) { for (j = 0; j < 40; j++) // 40*40 문자를 출력한다. { if (MyWord[0] == YourWord[i][j]) // 입력한 첫번째 문자가 40*40랜덤문자랑 비교하면서 맞는다면 아래조건을 실행한다. { //if (i <= 40&&j<=40) // 40*40 안에서만... { //return 0; /// 오른쪽 비교 if (MyWord[1] == YourWord[i][j + 1]) // 입력한 두번째 문자가 입력한 첫번째에 x+1에 자리랑 비교한다. { if (MyWord[2] == YourWord[i][j + 2]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); // 콘솔함수 좌표는 반대이므로 i,j 방향을 바꿔주었다. XXPutAttrChar(hOP, j + 1, i, YourWord[i][j + 1], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j + 2, i, YourWord[i][j + 2], BG_DEEPBLUE, FG_BLACK); } } /// 위쪽 비교 if (MyWord[1] == YourWord[i + 1][j]) // 입력한 두번째문자를 y+1문자랑 비교한다. { if (MyWord[2] == YourWord[i + 2][j]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j, i + 1, YourWord[i + 1][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j, i + 2, YourWord[i + 2][j], BG_DEEPBLUE, FG_BLACK); } } if (j > 0) // 배열은 0번째부터 시작하는데 -로 넘어가는것을 방지하기 위해 { /// 왼쪽비교 if (MyWord[1] == YourWord[i][j - 1]) // 입력한 두번째문자를 x-1문자랑 비교한다. { if (MyWord[2] == YourWord[i][j - 2]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j - 1, i, YourWord[i][j - 1], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j - 2, i, YourWord[i][j - 2], BG_DEEPBLUE, FG_BLACK); } } } if (i > 0) { /// 아래쪽비교 if (MyWord[1] == YourWord[i - 1][j]) // 입력한 두번째 문자를 y-1문자랑 비교한다. { if (MyWord[2] == YourWord[i - 2][j]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j, i - 1, YourWord[i - 1][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j, i - 2, YourWord[i - 2][j], BG_DEEPBLUE, FG_BLACK); } } } /// 오른쪽위 if (MyWord[1] == YourWord[i + 1][j + 1]) { if (MyWord[2] == YourWord[i + 2][j + 2]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j + 1, i + 1, YourWord[i + 1][j + 1], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j + 2, i + 2, YourWord[i + 2][j + 2], BG_DEEPBLUE, FG_BLACK); } } /// 왼쪽위 if (MyWord[1] == YourWord[i + 1][j - 1]) { if (MyWord[2] == YourWord[i + 2][j - 2]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j - 1, i + 1, YourWord[i + 1][j - 1], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j - 2, i + 2, YourWord[i + 2][j - 2], BG_DEEPBLUE, FG_BLACK); } } /// 오른쪽 아래 if (MyWord[1] == YourWord[i - 1][j + 1]) { if (MyWord[2] == YourWord[i - 2][j + 2]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j + 1, i - 1, YourWord[i - 1][j + 1], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j + 2, i - 2, YourWord[i - 2][j + 2], BG_DEEPBLUE, FG_BLACK); } } /// 왼쪽아래 if (MyWord[1] == YourWord[i - 1][j - 1]) { if (MyWord[2] == YourWord[i - 2][j - 2]) { XXPutAttrChar(hOP, j, i, YourWord[i][j], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j - 1, i - 1, YourWord[i - 1][j - 1], BG_DEEPBLUE, FG_BLACK); XXPutAttrChar(hOP, j - 2, i - 2, YourWord[i - 2][j - 2], BG_DEEPBLUE, FG_BLACK); } } } } } printf("\n"); } }
근데 굳이 2차원 배열을 쓸 필요가 있을까 출력만 40개마다 뉴라인 넣어주면 1차원으로 해도 될거 같은데