Visual Studio C/C++ 콘솔 응용 프로그램에서 콘솔 창 닫힘 방지
이것은 아마도 당황스러운 질문일 것이다. 왜냐하면 그 답은 분명하기 때문이다.
저는 Visual Studio를 수년간 사용해 왔지만, '콘솔 애플리케이션' 개발은 이번이 처음입니다.
응용 프로그램을 실행하면 콘솔 창이 뜨고 프로그램 출력이 나타나고 응용 프로그램이 종료되면 창이 닫힙니다.
출력을 확인할 때까지 열어두거나 창을 닫은 후에 결과를 볼 수 있는 방법이 있습니까?
Visual Studio 2017(15.9.4)부터는 다음과 같은 옵션이 있습니다.
Tools->Options->Debugging->Automatically close the console
Visual Studio 매뉴얼에 기재되어 있는 대응하는 fragment:
디버깅이 정지되면 콘솔을 자동으로 닫습니다.
디버깅 세션이 끝날 때 콘솔을 닫도록 Visual Studio에 지시합니다.
디버깅(Ctrl+F5)을 실행하지 않고 실행하면 기본적으로는 Return 키를 눌러 창을 닫도록 요구됩니다.디버거를 사용하려면 마지막 줄에 중단점을 넣어야 합니다.
프로젝트를 오른쪽 클릭합니다.
[ Properties ]> [ Configuration Properties ]> [ Linker ]> [ System ]
콘솔(/SUBSYSTEM:콘솔) 내SubSystem
옵션 또는 텍스트 필드에 Console을 입력할 수 있습니다.
자, 한번 해봐... 잘 될 거야
사용하고 . NET, 입입Console.ReadLine()
츠요시
<ENTER>
.
Goto 디버깅메뉴 -> Start Without Debugging (디버깅 없이 시작)을 누릅니다.
코드의 마지막 줄에 넣기만 하면 됩니다.
system("pause");
VS에서 실행하면 VS 디버거가 연결되므로 연결된 디버거가 있는지 확인할 수 있습니다.
if (Debugger.IsAttached)
{
Console.WriteLine("Debugger is attached. Press any key to exit.");
Console.ReadKey();
}
유일한 경고는 다른 디버거를 연결해도 여전히 일시 중지된다는 것입니다. 하지만 원하는 동작일 수도 있습니다.
Console.ReadLine()
프로그램 마지막에.그러면 키를 누를 때까지 창이 열린 상태로 유지됩니다.상세한 것에 대하여는, https://docs.microsoft.com/en-us/dotnet/api/system.console.readline 를 참조해 주세요.
C/C++의 방법은 다음과 같습니다.
#include <stdlib.h>
#ifdef _WIN32
#define WINPAUSE system("pause")
#endif
의 맨 하고, 시스템Windows 시스템)에.Windows 의 「」를 참조해 주세요.#ifdef _WIN32
라고 하는 를 만듭니다.WINPAUSE
정지하고 는, , 「 」로 전화 주세요.WINPAUSE;
DOS 명령어를 사용하여 프로그램을 일시 정지합니다.Unix/Linux 등의 다른 시스템의 경우 콘솔은 프로그램 종료 시 종료되지 않습니다.
셋업이나 코드를 변경하지 않는 간단한 해킹에는 다음과 같은 것이 있습니다.
F9로 브레이크 포인트를 설정하고 F5로 디버깅을 실행합니다.
프로젝트 속성의 디버깅 섹션 아래의 명령어 인수 상자에 "| 일시 중지"를 추가합니다.
를 걸다getchar()
main()
아온온다
(/서브시스템:콘솔)은 vs2013에서 작동하지 않았습니다(이미 가지고 있었습니다).
"run without debugging"은 디버깅과 출력 보기 사이에서 전환하고 싶지 않기 때문에 옵션이 아닙니다.
끝으로 끝나다
int main() {
...
#if _DEBUG
LOG_INFO("end, press key to close");
getchar();
#endif // _DEBUG
return 0;
}
qtcreator 2.6 이전 버전에서 사용된 용액입니다.현재 QT는 증가하고 있지만 vs는 다른 방향으로 가고 있습니다.내가 기억하기로는, vs2008년에는 그런 속임수가 필요없었다.
이 옵션을 사용할 수도 있습니다.
#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 커뮤니티 에디션에서 Empty C++ 프로젝트를 만들 때 이런 경험을 했습니다.서브시스템을 "콘솔(/SUBSYSTEM:CONSOLE)을 클릭합니다.
- "View"로 이동한 후 "Property Manager"를 선택합니다.
- 프로젝트/솔루션 우클릭 후 [프로퍼티]를 선택합니다.테스트 속성 페이지가 열립니다.
- 링커로 이동하여 "시스템"을 선택합니다.
- "SubSystem"을 클릭하면 드롭다운이 나타납니다.
- 콘솔(/SUBSYSTEM:콘솔)
- 적용 후 저장
- 다음에 "CTRL + F5"로 코드를 실행하면 출력이 표시됩니다.
좀 더 나은 솔루션:
atexit([] { system("PAUSE"); });
프로그램을 시작할 때 사용합니다.
장점:
- std::syslog()를 사용할 수 있습니다.
- 메인에서 여러 번 반환할 수 있다
- 디버거에서 프로그램을 실행할 수 있습니다.
- (IDE를 )
cin.sync(); cin.ignore();
를 쓰다system("pause");
)
단점:
- 코드를 수정해야 한다
- std::flash()에서 일시 정지하지 않음
- 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
★★★★★★ 。
다음은 (1) 코드 변경이나 중단점이 필요하지 않으며 (2) 프로그램 종료 후 일시 중지되므로 인쇄된 모든 내용을 볼 수 있는 솔루션입니다.F5 또는 Ctrl+F5 중 하나 후에 일시 정지합니다.VS2013 Express(테스트 결과)에서는 기호를 로드하지 않기 때문에 디버깅이 매우 제한적이라는 것이 큰 단점입니다.
배치 파일을 만듭니다.는 내 을 는는라고 불렀다.
runthenpause.bat
, 다음의 내용이 기재되어 있습니다.%1 %2 %3 %4 %5 %6 %7 %8 %9 pause
첫 번째 행은 사용자가 지정한 명령어와 최대 8개의 인수를 실행합니다.두 번째 줄은...멈추다.
프로젝트 속성 | 구성 속성 | 디버깅을 엽니다.
- "명령어 인수"를 다음으로 변경합니다.
$(TargetPath)
(또는 "명령"에 있는 모든 것). - "명령어"를 다음과 같은 전체 경로로 변경합니다.
runthenpause.bat
. - OK를 클릭합니다.
자, 당신이 도망칠 때,runthenpause.bat
응용 프로그램이 시작되고 응용 프로그램이 종료된 후 콘솔 출력을 볼 수 있도록 일시 중지됩니다.
심볼을 로드하는 방법을 알게 되면 업데이트를 올리겠습니다.나는 노력했다./Z7
하지만 성공하지 못했습니다.
CNTRL + F5를 누르면 외부 명령줄 창에서 열 수 있습니다(Visual Studio에서는 제어할 수 없음).
이 방법으로 동작하지 않는 경우는, 코드 끝에 다음을 추가합니다.
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
코드가 종료되면 키를 눌러 터미널 창을 닫을 때까지 기다립니다.
이 작업을 여러 곳에서 수행하려면 위의 코드를 메서드에 입력하십시오(예:private void Pause()
를 호출합니다.Pause()
프로그램이 가능한 종료에 도달할 때마다.
Visual Studio 2015, Import 포함.코드 예시로 필요한 Import를 제공하지 않는 것이 싫기 때문입니다.
#include <iostream>;
int main()
{
getchar();
return 0;
}
명령 프롬프트에서 실행 파일을 실행할 수 있습니다.이렇게 하면 모든 출력을 볼 수 있습니다.또는 다음과 같은 작업을 수행할 수 있습니다.
int a = 0;
scanf("%d",&a);
return YOUR_MAIN_CODE;
이 방법으로 창은 데이터 입력이 끝날 때까지 닫히지 않습니다.a
변수.
[설정] > [디버깅]> [닫기]의 순서로 선택합니다.
현재 WSL2에서 실행 중인 앱에서는 이 작업을 수행할 방법이 없습니다.다만, 다음의 2개의 회피책이 있습니다.
디버깅 창에는 닫힌WSL 셸 창의 내용이 유지됩니다.
응용 프로그램이 0이 아닌 반환 코드를 반환하는 경우 창은 열린 상태로 유지되므로 디버깅빌드에서 0이 아닌 반환 코드를 반환할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1775865/preventing-console-window-from-closing-on-visual-studio-c-c-console-applicatio
'programing' 카테고리의 다른 글
Clang이 초과 부동소수점 정밀도에 어떻게 대처하는지 설명하는 문서가 있습니까? (0) | 2022.08.07 |
---|---|
vuex에서 nuxt-i18n 패키지의 localRoute를 사용하는 방법 (0) | 2022.08.03 |
잭슨 JSON과 휴지 상태 JPA의 무한 재귀 문제 (0) | 2022.08.03 |
커스텀 프로펠러 타입 Vue.js (0) | 2022.08.03 |
Java 설치를 위한 환경 변수 (0) | 2022.08.03 |