티스토리 뷰

Programming/C+±

pause in console program

BaeMinCheon 2018. 3. 8. 22:29

C&C++ Note #001


콘솔 프로그램의 중단


문제

  • 콘솔 프로젝트를 F5 단축키로 디버깅 실행시, 프로그램이 종료되었을 때 콘솔창 또한 닫힘
  • 콘솔 프로젝트의 출력을 일정 구간씩 분할하여 차례대로 내보내야 하는 상황

해결

  • system("pause"); : stdlib.h의 system()을 사용
    • 해당 코드가 실행되면 계속하려면 아무 키나 누르십시오...라는 문구가 출력되고, 아무 키가 입력되기 전까지 프로그램의 실행이 중단됨
  • getchar(); : stdio.h의 getchar()를 사용
    • 해당 코드가 실행되면, enter키가 눌렸을 때(\n이 입력되면) stdin에서 한 개의 char를 가져온다. 가져오는 데 성공하기 전까지 프로그램의 실행이 중단됨
  • cin.get(); : iostream의 cin 멤버함수 get()을 사용
    • 해당 코드가 실행되면, enter키가 눌렸을 때 stdin에서 한 개의char를 가져온다. 가져오는 데 성공하기 전까지 프로그램의 실행이 중단됨.
  • _getch(); : conio.h의 _getch()를 사용
    • 해당 코드가 실행되면, 아무 키가 입력되기 전까지 프로그램의 실행이 중단된다. 버퍼, 즉 stdin을 거치지않기 때문에 stdin을 비울 필요가 없다.

한계

  • system("pause"); : (외부 프로그램을 실행하기 때문에) 시스템 리소스를 많이 잡아먹으며, 윈도우즈 이외의 플랫폼에서 사용할 수 없는 코드 (+ 특정 상황에서는 보안 약점도 존재)
  • getchar(); : stdin이 비어있지 않은 상태에서 사용할 경우, 프로그램이 중단되는 효과를 볼 수 없다. fflush(stdin);을 사용할 수도 있지만, 비표준이며 다른 플랫폼에서 호환되지 않는다.
  • cin.get(); : getchar()의 한계점과 동일하다. 다만, cin.ignore(numeric_limits<streamsize>::max(), '\n');을 사용해 stdin에서 \n을 만날 때까지의 버퍼를 지우고 \n도 지우는 방법으로 해결할 수는 있다.
  • _getch(); : 특정 키만 입력받도록 제어할 수 없다. 아무 키가 입력되기만 하면 프로그램 중단이 해제된다.

결론

  • 상황에 따라 _getch() 또는 cin.get()을 사용하는 것이 좋겠다.


'Programming > C+±' 카테고리의 다른 글

cpp-lib-and-dll-on-visual-studio (2/2)  (0) 2019.03.17
cpp-lib-and-dll-on-visual-studio (1/2)  (0) 2019.02.23
SetCapture() GetCapture() ReleaseCapture()  (2) 2018.04.01
refresh in console program  (0) 2018.03.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함