1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int A[3];//쉬움난이도 int B[4]; int C[4];//중간난이도 int D[5]; int E[5];//어려움난이도 int F[6]; int i=1; int j,k; int difficult; // 난이도 설정 int strike; int ball; int a; // 정답확인용 while(1) //처음시작파트 { printf("난이도(숫자 0,1,2,3을 입력하세요)\n0번 - 설명\n1번 - 쉬움(3자리)\n2번 - 중간(4자리)\n3번 - 어려움(5자리)\n난이도를 고르세요 - "); scanf("%d", &difficult); if (difficult == 0) // 설명문 { printf("\n\n\n숫자야구 게임 설명\n"); printf("랜덤한 숫자를 맞추는 게임입니다.\n"); printf("자릿 수는 쉬움 3자리, 보통 4자리, 어려움 5자리가 있습니다.\n"); printf("각 숫자는 띄워쓰기로 구분합니다.\n"); printf("ex) 123( x ), 1 2 3( o )\n\n"); } if (difficult == 1) // 1을 입력했을때 { do { srand(time(NULL)); A[0] = rand() % 10; A[1] = rand() % 10; A[2] = rand() % 10; if (A[0] != 0) if (A[1] != 0) if (A[2] != 0) if (A[0] != A[1]) if (A[0] != A[2]) if ((A[1] != A[2])) { printf("\n\n\n(3자리 쉬움)난이도로 Start Game\n\n\n"); break; } } while (1); //서로다른 숫자를 뽑기위해 계속 실행하기위해 do while 무한반복문을 하였다. do { printf("3개의 숫자 선택 :"); scanf("%d %d %d", &B[0], &B[1], &B[2]); if ((A[0] == B[0]) && (A[1] == B[1]) && (A[2] == B[2])) // 정답조건 { printf("game over \n"); break; } else if ((B[0] == B[1]) && (B[0] == B[2]) && // 중복된 숫자입력방지 (B[1] == B[2])) { printf("중복된 숫자입력은 안 됌\n"); } else if ((B[0] > 10) || (B[1] > 10) || (B[2] > 10)) // 10 이상의 숫자 입력되면 리턴 { printf("각 자리는 10미만의 수만 입력 가능\n"); } /* else if ((B[4] != 0)) // 자릿수 초과해서 입력시 에러 { printf("\n\n자릿 수 초과\n\n"); } */ else //그렇지 않으면 반복문 실행 { strike = 0; ball = 0; // 반복시 스트라이크 볼 숫자 초기화 for (j = 0; j < 3; j++) //정답 배열 비교 { for (k = 0; k < 3; k++) //플레이어 입력값 비교 { if (A[j] == B[k]) // 처음에는 변수를 배열로 하지 않았는데 a,b,c,d,e,f 로 하면 조건이 너무 길어져서 일단 임의의 숫자랑 사용자가 선택한 숫자가 같은 조건을 만들었다. { if (j == k) //배열과 숫자 동시 만족시 스트라이크 strike++; else //숫자만 만족시 볼 ball++; } } } printf("%d번쨰 도전결과 : %d strike, %d ball !!\n\n", i, strike, ball); } i++; }while (1); } i++; } while (1); return 0; } | cs |
난이도 조절하는 부분있는데 한곳만 해결하면 다른곳도 다 해결될거같아서 앞부분만 잘랐어요.
제가 질문드리려는건 중간에 주석처리 된
else if ((B[4] != 0)) // 자릿수 초과해서 입력시 에러
{
printf("\n\n자릿 수 초과\n\n");
}
이 파트입니다.
숫자야구 쉬움단계를 세자리를 맞추는 걸로 했습니다
int A[3] 는 랜덤숫자를 받아오는 배열
int B[4] 는 사용자 입력값을 받아오는 배열이구요.
B[4]를 해준 이유는 만약 1 2 3 이런숫자가 아닌 1 2 3 4 이런식으로 세자리를 넘는 배열이 입력되면
B[4]를 확인해서 예외처리를 하려고 했기 때문입니다.
하지만 B[4]!=0을 하면 정상적인 입력값도 모두 예외처리가 되어버리고
B[3]!=0을하면 예외처리 되어야 할 값이 입력됩니다.
어떻게하면 될까요??
포인터 안배우고 배열로만 짜려는데 가능한가여?
그럼 길이를받으면되는데 포인터가아닌배열이라면은 숫자받고 그값을 반복문으로n크기까지에게 나눠주고 그아래는 버리는식이좋을듯
근데 그냥포인터쓰셈
아 저깄네 음 우선 B배열을 초기화 해주고, 스트링으로 받아오는게 확실하긴 한데 scanf에서 규정숫자 넘어가면 음... 까먹었네