최근에 나는 이 웹 사이트 에서 C ++를 배우려고 노력했다 . 불행히도 코드 샘플 중 하나를 실행하려고 할 때마다 해당 프로그램이 약 0.5 초 동안 열린 다음 즉시 닫힙니다. 내 노력의 결과를 볼 수 있도록 프로그램이 즉시 닫히지 않도록하는 방법이 있습니까?
최근에 나는 이 웹 사이트 에서 C ++를 배우려고 노력했다 . 불행히도 코드 샘플 중 하나를 실행하려고 할 때마다 해당 프로그램이 약 0.5 초 동안 열린 다음 즉시 닫힙니다. 내 노력의 결과를 볼 수 있도록 프로그램이 즉시 닫히지 않도록하는 방법이 있습니까?
답변:
편집 : Charles Bailey가 아래 주석에서 올바르게 지적했듯이에 버퍼링 된 문자가 있으면 작동하지 않으며 stdin
실제로 해결할 수있는 좋은 방법이 없습니다. 디버거가 연결된 상태에서 실행중인 경우 John Dibling의 제안 된 솔루션 은 아마도 가장 깨끗한 솔루션 일 것입니다.
즉, 나는 이것을 여기에두고 다른 누군가가 유용하다고 생각할 것입니다. 개발 중에 테스트를 작성할 때 빠른 해킹으로 많이 사용했습니다.
main
기능 이 끝나면 전화를 걸 수 있습니다std::getchar();
이 문자는에서 단일 문자를 가져 와서 stdin
"계속하려면 아무 키나 누르십시오"일종의 동작을 제공합니다 (실제로 "어떤 키를 누르십시오"메시지를 원하는 경우 직접 인쇄해야합니다).
당신은 필요 #include <cstdio>
에 getchar
.
getchar
문제를 해결하지 못하거나 최소한 제한된 상황에서만 가능합니다. 에서 문자를 읽지 stdin
만 stdin에서 이미 버퍼링 된 문자가있는 경우 프롬프트 인쇄 여부에 관계없이 대기하지 않고 프로그램이 계속 실행됩니다.
\n
부분 솔루션이지만 둘 이상의 입력 행이 버퍼링되는 경우 도움이되지 않습니다. 입력 스트림에서 모든 것을 지우는 표준 C ++ 방법을 모르겠습니다. :-/
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
입니다 #include <limits>
.
Visual Studio를 사용 중이고 IDE에서 콘솔 응용 프로그램을 시작하는 경우 :
눌러 CTRL-F5를 응용 프로그램을 시작하고 당신이 어떤 키를 누를 때까지 콘솔 창을 열어 계속됩니다 (디버깅하지 않고 시작).
James의 솔루션은 모든 플랫폼에서 작동합니다.
또는 함수 Windows
에서 돌아 오기 직전에 다음을 추가 할 수도 있습니다 main
.
system("pause");
pause
키를 누를 때까지 대기 하는 명령을 실행하고 멋진 메시지를 표시합니다.Press any key to continue . . .
Microsoft의 Visual C ++ 2010 Express를 사용하고 있고 프로그램이 종료 된 후 콘솔을 열어 두지 않고 CTRL + F5 와 관련된 문제가 발생 하면이 MSDN 스레드를 살펴보십시오 .
CTRL + F5 실행 후 IDE가 콘솔을 닫도록 설정되었을 수 있습니다. 실제로 Visual C ++ 2010의 "빈 프로젝트"는 기본적으로 콘솔을 닫습니다. 이를 변경하려면 Microsoft 중재자가 제안한대로 수행하십시오.
프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 특성 페이지로 이동하여 구성 특성-> 링커-> 시스템을 펼치고 서브 시스템 드롭 다운에서 콘솔 (/ SUBSYSTEM : CONSOLE)을 선택하십시오. 기본적으로 빈 프로젝트는이를 지정하지 않기 때문입니다.
Windows에서 Windows를 사용하는 경우 콘솔에서 프로그램을 실행하십시오 (예 : cmd.exe에서 프로그램 실행). 이렇게하면 프로그램이 끝난 후에도 창이 열려 있습니다.
[편집] : KDevelop4를 사용할 때 IDE 하단의 탭에서 실행되는 Bash (Linux CLI) 인스턴스가 있습니다. 이런 종류의 상황에서 내가 사용하는 것은 무엇입니까?
main
정의되어 있으면 이것이 기본값 이지만, 명령 줄에서 명시 적으로 설정하지 않으면 VS는 응용 프로그램이 종료 될 때 창을 종료합니다. 한숨
main
프로젝트에서 정의하는 경우 링커는 기본적으로 CONSOLE 서브 시스템을 사용합니다. 디버깅하거나 실행할 때 콘솔 창이 나타납니다. 그러나 프로젝트 속성에서 CONSOLE을 하위 시스템으로 명시 적으로 지정하지 않으면 Visual Studio는 콘솔 창을 열어 두지 않습니다. 나는 항상 빈 프로젝트에서 시작하고 개별 프로젝트 속성을 거의 변경하지 않으므로 콘솔 창을 본 적이 없습니다. 혼란을 드려 죄송합니다
코드가 끝나기 전에 다음 줄을 삽입하십시오.
system("pause");
키를 누를 때까지 콘솔이 유지됩니다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cout << "Please enter your first name followed by a newline\n";
cin >> s;
cout << "Hello, " << s << '\n';
system("pause"); // <----------------------------------
return 0; // This return statement isn't necessary
}
cin.get();
2 번 전화 :
//...
cin.get();
cin.get();
return 0
}
Code :: Blocks 와 같은 유능한 IDE에서 코드를 실행 하면 IDE는 코드를 실행하는 데 사용하는 콘솔을 관리하여 응용 프로그램이 닫힐 때 코드를 열어 둡니다. 콘솔을 열어두기 위해 특수 코드를 추가하지 않으려는 경우 IDE 외부에서 실제로 사용할 때 콘솔이 올바르게 작동하지 않기 때문입니다.
좋아, Visual Studio를 사용하여 Windows를 사용하고 있다고 추측합니다. 왜 그렇습니까? 어떤 종류의 Linux OS를 사용하고 있다면 아마도 콘솔에서 실행하고있을 것입니다.
어쨌든 다른 사람들이 제안하는 것처럼 프로그램 끝에 쓰레기를 추가하거나 CTRL + F5 (디버깅하지 않고 시작)를 누르면 Visual Studio가 콘솔을 완료 한 상태로 유지합니다.
디버그 버전을 실행하고 코드에 크랩을 추가하지 않으려는 경우 콘솔 창 (시작-> 실행-> cmd)을 열고 디버그 출력 디렉토리로 이동하는 다른 옵션이 있습니다 . 그런 다음 실행 파일 이름을 입력하면 콘솔에서 디버그 프로그램이 실행됩니다. 그런 다음 Visual Studio의 첨부 파일을 사용하여 원하는 경우 처리 할 수 있습니다.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
cout << "Press any key to continue...";
getch();
return 0;
}
다른 사람이 여기에 게시하는 것을 보지 못했습니다.
conio.h
Windows 고유의 헤더로 추가하고 모든 컴퓨터에서 사용하지 못할 수 있습니다 (또는 과도기 인 별도의 링크가 필요할 수 있음).
실제로 Visual C ++에서 응용 프로그램을 디버깅하는 경우 도구 모음에서 F5 또는 녹색 삼각형을 누르십시오. 실제로 디버깅하지 않는 경우 (브레이크 포인트가 설정되지 않은 경우) Ctrl + F5를 누르거나 메뉴에서 디버깅하지 않고 시작을 선택하십시오 (일반적으로 디버그 메뉴에 혼동됩니다). 더 중요한 것은 코드를 변경하지 않고도 마지막에 일시 중지됩니다.
또는 명령 프롬프트를 열고 exe가있는 폴더로 이동 한 다음 이름을 입력하여 실행하십시오. 그렇게하면 명령 프롬프트 실행이 완료되지 않고 출력을 볼 수 있습니다. 이 두 가지 방법을 모두 선호하는 것처럼 앱을 종료하는 코드를 추가하는 것이 좋습니다.
프로그램 끝에 다음을 추가하십시오. 어떤 형태의 사용자 입력을 캡처하려고 시도하므로 콘솔이 자동으로 닫히지 않습니다.
cin.get();
Visual Studio (및 Visual Studio 만 해당)의 다음 코드 조각 에서는 먼저 입력 버퍼를 플러시하여 사용자가 새 키를 명시 적으로 누를 때까지 기다리는 '키 누르기를 기다립니다'라는 프롬프트를 표시 합니다.
#include <cstdio>
#include <tchar.h>
#include <conio.h>
_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();
이것은 tchar.h
매크로를 사용하여 여러 '문자 세트'(VC ++에서 호출하는 것처럼)와 호환됩니다.
나는 단지 이것을한다 :
//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;
참고 : cin 버퍼를 지우는 것은 프로그램의 어느 시점에서 cin을 사용한 경우에만 필요합니다. 또한 std :: numeric_limits :: max ()을 사용하는 것이 INT_MAX보다 낫지 만 다소 번거롭고 일반적으로 불필요합니다.
아래 코드와 같이 #include "stdafx.h"
&를 사용하십시오 system("pause");
.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
std::cout << "hello programmer!\n\nEnter 2 numbers: ";
int x, y;
std::cin >> x >> y;
int w = x*y;
std::cout <<"\nyour answer is: "<< w << endl;
system("pause");
}
system
가 <cstdlib>
아닌 로 선언되어 stdafx.h
있습니다.
간단히
#include <cstdio>
int main(){
// code...
std::getchar();
std::getchar();
return 0;
}
어떤 이유로 프로그램을 실행할 때 보통 stdin에 이미 getchar를 사용하여 읽을 수있는 문자가 1 개 있습니다. 따라서 첫 번째 getchar는이 문자를 읽고 두 번째 getchar은 프로그램을 종료하기 전에 사용자 (사용자) 입력을 기다립니다. 그리고 프로그램이 대부분의 터미널을 종료 한 후, 특히 Windows 닫기 터미널에서 즉시 종료됩니다. 우리가 목표로하는 것은 모든 것이 출력 된 후 프로그램이 끝나는 것을 막는 간단한 방법입니다. 물론 이것을 해결하는 더 복잡하고 깨끗한 방법이 있지만 이것이 가장 간단합니다.
Windows를 실행중인 경우 system("pause >nul");
또는 을 수행 할 수 있습니다 system("pause");
. 콘솔 명령을 실행하여 키를 누를 때까지 프로그램을 일시 중지합니다. >nul
그것을 말하지 못하게한다 Press any key to continue...
.
반환 0 직전에 cin.ignore ()를 사용하십시오. 두번
main()
{
//your codes
cin.ignore();
cin.ignore();
return 0;
}
그게 다야