development

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

big-blog 2020. 2. 17. 22:19
반응형

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


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

몇 년 동안 Visual Studio를 사용해 왔지만 'Console Application'개발을 한 것은 이번이 처음입니다.

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

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


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


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

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

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

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


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

#include <stdlib.h>

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

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


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


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

기다립니다 <ENTER>.


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


(/ 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에서는 그러한 트릭이 필요하지 않았습니다.


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

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

Visual Studio 설명서 의 해당 조각 :

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

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


다음은 (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 있지만 성공하지.


마지막 코드 줄로 넣으십시오.

system("pause");

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

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

return YOUR_MAIN_CODE;

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


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


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

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

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

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

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


다소 더 나은 해결책 :

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"); });
    ...
}

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

  1. cin.get();

또는

  1. system("pause");

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


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

#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;
}

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

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

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

#include <iostream>;

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

Console.ReadLine()프로그램 끝에서 사용하십시오 . Enter를 누를 때까지 창이 열립니다 . 자세한 내용은 https://docs.microsoft.com/en-us/dotnet/api/system.console.readline 을 참조하십시오.

참고 URL : https://stackoverflow.com/questions/1775865/preventing-console-window-from-closing-on-visual-studio-cc-console-applicatio



도와주세요.
반응형