C언어에서 반복문에 _getch()를 이용하면서 아무런 입력이 없을때도 반복이 되도록 하는 방법이 있나요?

조회수 2144회

원래는 0부터 1초당 1씩 커지게 출력하면서 r을 입력하면 다시 0부터 q를 입력하면 프로그램을 종료하게 만들려고 했는데요. 아래와 같이 만들어봤는데 키보드에서 다른 버튼을 계속 눌러줘야 작동을 해버리네요. 이런 경우에는 어떤식으로 활용하면 좋을지 조언 부탁드립니다.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>

int main(void)
{
    int n = 0;

    while (1)
    {
        system("cls");
        printf("%d\n", n);
        printf("r : 카운트 초기화    q : 프로그램 종료\n");
        n++;
        Sleep(1000);
        if (_getch() == 'q')
            break;
        else if (_getch() == 'r')
            n = 0;
    }

    return 0;
}
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 호라이즌님이 작성하신 프로그램은 실행을 시키면 main() 함수가 실행이 됩니다 이 함수는 메인 프로세스에서 하나의 실행흐름을 가지고 위에서부터 쭉- 실행이 됩니다

    위에서부터 아래로 쭉 실행을 하다보면 메인 프로세스는 _getch() 함수를 만나게 됩니다 이 함수는 입력을 받는 함수같은데 대게 사용자에게 입력받는 함수는 블록킹 함수입니다 그래서 메인프로세스를 정지시키고 사용자의 입력이 완료되기까지 대기합니다 그래서 출력하는 부분도 같이 멈추게 되죠 메인 프로세스가 멈췄으니까요

    해결법은 실행 흐름을 2개로 만드는것입니다 하나의 실행흐름은 시간마다 커지는 숫자를 출력하고 다른 하나의 실행흐름은 사용자의 입력을 대기하다가 입력을 받으면 작업을 수행하는겁니다

    쓰레드에 대해 검색하고 다시 만들어보세요 화이팅

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다! 조언해주신 내용으로 다시 생각하다가 해결방법이 떠올랐네요! 알 수 없는 사용자 2017.11.22 10:20

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)