편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2019.11.11

    정수를 분리하는 방법에 대해서 궁금한게 있습니다.


    제가 숫자야구 프로그램을 짜보는 중인데요,

    자릿수를 설정 할 수 있는, 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;
    
  • 프로필 정일령님의 편집
    날짜2019.11.11

    정수를 분리하는 방법에 대해서 궁금한게 있습니다.


    제가 숫자야구 프로그램을 짜보는 중인데요,

    자릿수를 설정 할 수 있는, 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;