Visual Studio C / C ++ 콘솔 응용 프로그램에서 콘솔 창이 닫히지 않도록 방지


464

의심의 여지없이 대답이 맹목적으로 명백하기 때문에 이것은 아마도 창피한 질문 일 것입니다.

몇 년 동안 Visual Studio를 사용해 왔지만 이번에 처음으로 '콘솔 응용 프로그램'을 개발했습니다.

내 응용 프로그램을 실행하면 콘솔 창이 팝업되고 프로그램 출력이 나타난 다음 응용 프로그램이 종료되면 창이 닫힙니다.

출력을 확인할 때까지 열어 두거나 창을 닫은 후 결과를 볼 수있는 방법이 있습니까?


Monodevelop는 당신이 기대하는 것을 수행합니다.
ctrl-alt-delor

3
아래 답변이 너무 많으므로 여기에 답변을 복사하십시오 .VS2017을 사용하는 경우 도구-> 옵션-> 디버깅-> 콘솔 자동 종료
jw_

동의했다. VS 2017 이상에 대한 가장 좋은 대답은 chronoxor의 답변이라고 생각합니다.
모든 분노

답변:


466

디버깅하지 않고 실행하면 (Ctrl + F5) 기본적으로 return 키를 눌러 창을 닫으라는 메시지가 표시됩니다. 디버거를 사용하려면 마지막 줄에 중단 점을 두어야합니다.


268
C ++ 앱이 있고 Run Without Debugging이 있고 콘솔 창이 여전히 닫히면 Configuration Properties / Linker / System에서 하위 시스템을 Console로 명시 적으로 설정해야합니다. 빈 프로젝트로 시작하여 서브 시스템을 설정하지 않은 경우에 발생할 수 있습니다.
Trevor Robinson

4
나를 위해 일을하지 않았다 :( 콘솔 창이 열리고 즉시 닫힌다하지만 F5의 관련 보도에 대한 로그 일시 중지 및 대기
CodyBugstein

40
정답은 @TrevorRobinson의 답변입니다. 구성 속성의 위치를 ​​찾는 데 문제가있는 경우 확장 버전은 다음과 같습니다. Visual Studio에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성> 구성 속성> 링커> 시스템을 서브 시스템으로 변경하십시오. 콘솔 "
PlagueHammer

3
트레버 로빈슨이 옳습니다. 빈 프로젝트를 시작하면 C ++ 항목입니다. 보기-> 속성 관리자-> 속성 (렌치 아이콘)-> 구성으로 이동해야합니다. 팝업 메뉴에서 속성-> 링커-> 시스템-> 하위 시스템->에서 콘솔을 선택하십시오.
가장 존경받는 선생님

10
VS 커뮤니티 2017에서 ctrl+f5일하고 있습니다. 작동하지 않고 Properties프로젝트를 마우스 오른쪽 버튼으로 클릭 할 때도 없으며 wrench icon회색으로 표시됩니다.
Ketan

232

프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오

속성> 구성 속성> 링커> 시스템

선택 : 콘솔 (콘솔 / 서브 시스템)SubSystem옵션 또는 당신은 입력 할 수 있습니다 콘솔을 텍스트 필드에!

이제 시도해보십시오 ... 작동해야합니다


이것은 VS2013 Express에서 작동했지만 허용 된 답변은 그렇지 않습니다. 허용 된 답변이 과거에 사용한 모든 Visual Studio 버전에서 작동했기 때문에 매우 이상합니다.
Michael Calvin

9
@MichaelCalvin 이것을 설정 한 후에 Ctrl + F5로 실행해야합니다. 이것이 키커입니다.
Jonathan Mee

@JonathanMee는 여전히 Ctrl + F5를 실행했다고 말했습니다. 이것은 이미 Visual Studio 2015에서 설정되었으므로 첫 번째 대답은 가장 큰 도움이되었습니다.

이것은 실제로 맞습니다. CTRL+F5빈 프로젝트에 새 C ++ 파일을 추가하면 익숙한 사용자 가 실패합니다.
user2023370

Visual Studio Express 2015에서 저를 위해 일했습니다. 감사합니다.
LHC

44

C / C ++의 방법은 다음과 같습니다.

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif

이것을 프로그램 상단에 놓고 Windows 시스템 ( #ifdef _WIN32)에 있으면이라는 매크로를 만듭니다 WINPAUSE. 프로그램이 일시 정지 될 때마다 WINPAUSE;DOS 명령을 사용하여 프로그램을 일시 정지합니다. Unix / Linux와 같은 다른 시스템의 경우 프로그램 종료시 콘솔이 종료되지 않아야합니다.


이 방법은 Visual C ++에서 작동하지 않습니다 (일부 헤더를 포함하지 않으면?)
wmac

2
@wmac windows.h 헤더를 포함시켜야합니다
Geowil

1
라이브러리 또는 네임 스페이스를 포함하지 않았지만 제대로 실행되어 감사합니다.
Halil İbrahim Oymacı 2016 년

1
제발 하지마 pause명령은 Windows 다릅니다.
firegurafiku

Visual Studio 2013 Express에서 나를 위해 일했습니다. :)
Anirban

32

디버깅 메뉴로 이동-> 디버깅하지 않고 시작을 누릅니다 .


C # 개발 환경을 선택하지 않으면 VS 2008의 옵션조차 아닙니다. CTRL + F5는 작동합니다. 도구> 사용자 정의를 통해이를 도구 모음에 단추로 추가 할 수도 있습니다.
perry

여러 프로젝트가있는 경우 관련 프로젝트를 시작 프로젝트로 설정 한 경우
CAD bloke

27

.NET을 사용 Console.ReadLine()하는 경우 프로그램을 종료하기 전에 두십시오 .

기다립니다 <ENTER>.


9
+1-또는 Console.ReadKey()키를 기다립니다.
Fredrik Mörk

이상하게도, 이것은 내 앱에는 영향을 미치지 않습니다. 사용자 입력을 기다리지 않고 여전히 닫힙니다.
Kokodoko

4
그러면 코드가 해당 지점에 도달하기 전에 종료 될 가능성이 높습니다.
실제로

20

Visual Studio 2017 (15.9.4)부터는 옵션이 있습니다.

Tools->Options->Debugging->Automatically close the console

Visual Studio 설명서 의 해당 조각 :

디버깅이 중지되면 콘솔을 자동으로 닫습니다.

디버깅 세션이 끝나면 콘솔을 닫도록 Visual Studio에 지시합니다.


2
방금 VS2017 및 VS2019에서 이것을 테스트했습니다. 서브 시스템을 CONSOLE로 설정하고이 옵션을 해제해야합니다. 하나 또는 다른 것이 있거나 창을 자동으로 닫지 않습니다.
Casey

동일한 솔루션에서 여러 프로젝트를 시작하면 여전히 창이 닫힙니다.
Rogatch Serge

이것이 VS 2017 이상에 대한 정답이라고 생각합니다. 이전 버전이 아니 어서 너무 나쁩니다.
All Rage

13

돌아 getchar()오기 직전 에 전화를 걸어보십시오 main().


VS 2008에서는 간단한 Hello Name 콘솔 앱이 작동하지 않습니다. cout, cin, cout, getchar (), 콘솔은 여전히 ​​닫힙니다. 거래는 무엇입니까?
perry

1
getchar () 직전에 cout이 있으면 getchar ()을 두 번 입력하십시오. getchar ()는 char을 예상하고 이미 cout으로 제공하고 있습니다. 이것이 도움이되는지 알려주세요 :)
Magarusu

12

(/ SUBSYSTEM : CONSOLE)이 vs2013에서 작동하지 않았습니다 (이미 있음).

"디버깅없이 실행"은 디버깅과 출력보기 사이를 전환하고 싶지 않으므로 옵션이 아닙니다.

나는 끝났다

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

qtcreator pre 2.6에서 사용 된 솔루션. Qt가 성장하는 동안 vs는 다른 방향으로 가고 있습니다. 내가 기억하는 것처럼, vs2008에서는 그러한 트릭이 필요하지 않았습니다.


7

다음은 (1) 코드 변경이나 중단 점이 필요하지 않으며 (2) 프로그램 종료 후 일시 중지 되어 인쇄 된 모든 내용 을 볼 수 있는 솔루션입니다 . F5 또는 Ctrl + F5 후에 일시 중지됩니다. 주요 단점은 테스트 된 VS2013 Express에서 기호를로드하지 않으므로 디버깅이 매우 제한적이라는 것입니다.

  1. 배치 파일을 작성하십시오. 나는 runthenpause.bat다음 내용으로 내 전화했다 .

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause

    첫 번째 줄은 사용자가 제공 한 명령과 최대 8 개의 인수를 실행합니다. 두 번째 줄은 ... 일시 정지합니다.

  2. 프로젝트 속성 | 구성 특성 | 디버깅.

  3. "명령 인수"를 $(TargetPath)(또는 "명령"에있는 모든 것으로) 변경하십시오.
  4. "Command"를 전체 경로로 변경하십시오 runthenpause.bat.
  5. 확인을 누르십시오.

이제 실행하면 runthenpause.bat응용 프로그램이 시작되고 응용 프로그램이 종료되면 콘솔 출력을 볼 수 있도록 일시 중지됩니다.

심볼을로드하는 방법을 알아 내면 업데이트를 게시 할 것입니다. 나는 시도 /Z7 있지만 성공하지.


1
이것은 여전히 ​​디버깅을 지원하지 않지만 적어도 다른 모든 답변 과 달리 VLD의 출력을 볼 수없는 문제를 해결합니다 .
Martin Hennings 2013


3

명령 프롬프트에서 실행 파일을 실행할 수 있습니다. 이렇게하면 모든 출력을 볼 수 있습니다. 또는 다음과 같이 할 수 있습니다.

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

이렇게하면 a변수에 대한 데이터를 입력 할 때까지 창이 닫히지 않습니다 .


3

"| 추가 프로젝트 속성의 디버깅 섹션에있는 명령 인수 상자에 pause를 입력하십시오.


4
이것이 효과가 있다면 훌륭한 솔루션이 될 것입니다. pause배치 파일에서만 작동하는 것으로 보이며 STDIN에서 프로그램의 입력을받는 동안 해당 텍스트를 다시 인쇄하지 않습니다. 나는 대체하는 시도 |와 함께 &&,하지만 아무런 영향을 미치지 않는다 - 그것은 명령 쉘 (cmd.exe를)로 실행되지 아마도 때문이다.
브라이언 반덴버그

3

CNTRL + F5를 누르면 외부 명령 줄 창에서 열 수 있습니다 (Visual Studio에서는 제어 할 수 없음).

이것이 작동하지 않으면 코드 끝에 다음을 추가하십시오.

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

코드가 끝에 도달하면 키를 눌러 터미널 창을 닫을 때까지 기다립니다.

여러 곳에서이 작업을 수행하려면 위의 코드를 메서드 (예 :)에 넣고 프로그램이 가능한 끝에 도달 할 때마다 private void Pause()호출하십시오 Pause().


cntrl + f5를하면 열리고 즉시 닫힙니 까? 어떻게 고쳐?
Callat

두 번째 해결책은 내가 찾고 있던 것이 었습니다!
RoG

Ctrl + F5를 누르면 아무 일도 일어나지 않습니다. 그것은 나를 위해 일했지만 갑자기 모두 작동을 멈췄습니다.
Natasha

2

다소 더 나은 해결책 :

atexit([] { system("PAUSE"); });

프로그램 시작시.

장점 :

  • std :: exit () 사용할 수 있습니다
  • 메인에서 여러 번 반환 할 수 있습니다
  • 디버거에서 프로그램을 실행할 수 있습니다
  • IDE 독립 ( cin.sync(); cin.ignore();대신 트릭 을 사용하는 경우 + OS 독립적 system("pause");)

단점 :

  • 코드를 수정해야한다
  • std :: terminate ()에서 멈추지 않습니다.
  • 여전히 IDE / 디버거 세션 외부의 프로그램에서 발생합니다. Windows에서 다음을 사용하여이를 방지 할 수 있습니다.

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}

매우 나쁜 조언.
건배와 hth. -Alf

이유를 자세히 설명해 주시겠습니까?
GhassanPL

디버깅하지 않는 경우 아무 문제가 없습니다.이 경우 해결해야 할 문제가 없기 때문입니다. VS에서는 Ctrl + F5를 사용하여 프로그램을 실행하면됩니다 .VS에는 아무런 문제가 없으며 명령 인터프리터에는 아무런 문제가 없습니다. 즉, 문제가 없습니다. 또한 디버깅 중이고 중지 추가 코드를 원하는 경우 중단 점보다 편리한 솔루션이 아니며 중지를 원하지 않는 상황을 방해합니다.
건배와 hth. -Alf

2

어느 쪽이든 사용하십시오 :

  1. cin.get();

또는

  1. system("pause");

main()기능 이 끝날 때 와 return명령문 앞에 두 가지 중 하나를 작성하십시오.


2

이 옵션을 사용할 수도 있습니다

#include <conio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
   .
   .
   .
   getch(); 

   return 0;
}

2

제 경우에는 VS 2017 Community Edition에서 Empty C ++ 프로젝트를 만들 때이 문제가 발생했습니다. 구성 등록 정보에서 서브 시스템을 "콘솔 (/ SUBSYSTEM : CONSOLE)"로 설정해야합니다.

  1. "보기"로 이동 한 다음 "속성 관리자"를 선택하십시오.
  2. 프로젝트 / 솔루션을 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택하십시오. 테스트 속성 페이지가 열립니다
  3. 링커로 이동 한 다음 "시스템"을 선택하십시오.
  4. "SubSystem"을 클릭하면 드롭 다운이 나타납니다
  5. "콘솔 (/ SUBSYSTEM : CONSOLE)"을 선택하십시오.
  6. 적용 및 저장
  7. 다음에 "CTRL + F5"로 코드를 실행하면 출력이 표시됩니다.

0

수입 과 함께 Visual Studio 2015 . 코드 예제가 필요한 가져 오기를 제공하지 않을 때 싫어하기 때문입니다.

#include <iostream>;

int main()
{
    getchar();
    return 0;
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.