정수를 분리하는 방법에 대해서 궁금한게 있습니다.
조회수 742회
제가 숫자야구 프로그램을 짜보는 중인데요,
자릿수를 설정 할 수 있는, 0을 쓸 수 있는 숫자야구 코드를 짜려 합니다.
그런데 0을 쓸때 문제가 발생하는데, 0이 숫자의 앞에 오는 경우(ex. 4자리 0123) 에 코드가 0을 읽어내지 못하는것 같습니다. int형에서는 저렇게 숫자 맨 앞에 0이 오면 못 읽어내는것 같은데 해결책이 궁금합니다.
int main() {
char answer[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 숫자 값
int numLen; // 자릿 수
int inputNum[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1}; // 입력 값(-1 포함)
int inputCount; // 횟수
char wip[11];
SetConsoleTitle(TEXT("C언어 숫자야구"));
srand(GetTickCount64());
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
while (1) { // 프로그램 전체 루프
for (int i = 0; i < 11; i++) {
inputNum[i] = 0;
}
while (1) { // 자리수 설정 루프
system("cls");
printf("-------------------------------------------");
printf("\nC언어 숫자야구입니다.\n몇 자리의 수로 게임을 하시겠습니까? (1~9)\n\n[입력] : ");
scanf("%d", &numLen);
BuffClear();
if (numLen >= 1 && numLen <= 9) break;
}
printf("-------------------------------------------");
printf("\n정답 숫자를 맞춰주세요!\n-1을 입력하면 게임을 새로 시작합니다.\n");
inputCount = 0;
// 정답 숫자 뽑기 시작
answer[0] = pow(10, numLen+1) + rand() % 10;
for (int i = 0; i < numLen; i++) {
answer[i] = rand() % 10;
for (int j = 0; j < i; j++) {
if (answer[i] == answer[j]) { // 숫자가 중복될 시 다시 뽑음
i--;
break;
}
}
}
while (1) {
printf("-------------------------------------------");
printf("\n[입력] ");
scanf("%d", &inputNum[10], +pow(10, numLen+1));
BuffClear();
inputCount++;
if (inputNum[10] == -1) break;
sprintf(wip, "%d", inputNum[10]);
printf("%d\n", strlen(wip));
int asd = strlen(wip);
if (asd != numLen && (numLen-2 < asd < numLen))
{
printf("\n[오류] %d자리의 숫자로 입력하세요!!\n", numLen);
continue;
}
//숫자 중복 검사 시작 (inputNum[10] < pow(10, numLen-1) ? 1 : 0)
bool error = false;
for (int i = 0; i < numLen; i++) {
inputNum[i] = inputNum[10] / (int)pow(10, numLen - i - 1);
inputNum[10] -= inputNum[i] * (int)pow(10, numLen - i - 1);
for (int j = 0; j < i ; j++) {
if (inputNum[i] == inputNum[j]) {
printf("\n[오류] 중복된 숫자가 있습니다!!\n");
error = true;
break;
}
}
if (error) break;
}
if (error) continue;
댓글 입력