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에서 기호를로드하지 않으므로 디버깅이 매우 제한적이라는 것입니다.
배치 파일을 작성하십시오. 나는
runthenpause.bat
다음 내용으로 내 전화했다 .%1 %2 %3 %4 %5 %6 %7 %8 %9 pause
첫 번째 줄은 사용자가 제공 한 명령과 최대 8 개의 인수를 실행합니다. 두 번째 줄은 ... 일시 정지합니다.
프로젝트 속성 | 구성 특성 | 디버깅.
- "명령 인수"를
$(TargetPath)
(또는 "명령"에있는 모든 것으로) 변경하십시오. - "Command"를 전체 경로로 변경하십시오
runthenpause.bat
. - 확인을 누르십시오.
이제 실행하면 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"); });
...
}
어느 쪽이든 사용하십시오 :
cin.get();
또는
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)"로 설정해야합니다.
- "보기"로 이동 한 다음 "속성 관리자"를 선택하십시오.
- 프로젝트 / 솔루션을 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택하십시오. 테스트 속성 페이지가 열립니다
- 링커로 이동 한 다음 "시스템"을 선택하십시오.
- "SubSystem"을 클릭하면 드롭 다운이 나타납니다
- "콘솔 (/ SUBSYSTEM : CONSOLE)"을 선택하십시오.
- 적용 및 저장
- 다음에 "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 을 참조하십시오.
도와주세요.
'development' 카테고리의 다른 글
Docker에서 "노출"과 "게시"의 차이점은 무엇입니까? (0) | 2020.02.17 |
---|---|
Matplotlib에서 그림 제목 및 축 레이블 글꼴 크기를 어떻게 설정합니까? (0) | 2020.02.17 |
ASP.NET MVC 컨트롤러가 이미지를 반환 할 수 있습니까? (0) | 2020.02.17 |
ffmpeg를 사용하여 시작 및 종료 시간을 기준으로 비디오 자르기 (0) | 2020.02.17 |
jQuery를 사용하여 롤오버시 이미지 소스 변경 (0) | 2020.02.17 |