2011-09-21 6 views
1

Im은 현재 'Ivor Hortons Beginning Visual C++ 2010'이라는 책에서 C++을 배우고 있습니다.getch()를 사용하여 명령 프롬프트를 열어두기 Visual C++ 2010

모든 예제에서 나는 지금까지 getch()를 사용하여 명령 프롬프트를 열고, main 메소드의 끝에서 return 문을 제거해야했습니다.

이것은 Windows 7의 모호한 점입니까? 그러면 문제가 더 심해질 수 있습니까? 지금 당장이 일을하는 것은 문제가되지 않지만 책에 포함되지 않았기 때문에 내가 잘못 설정 한 것인지 궁금해하고있었습니다.

많은 감사 :)

+3

잘못된 방법은 무엇입니까? 또한 CTRL + F5를 누르면 앱이 종료 될 때 콘솔이 자동으로 열려 있습니다. – Jon

+0

CTRL + F5가 디버거를 시작하지 않습니다. – ChrisV

+1

getch()는 표준 함수가 아니므로 cinport()를 사용하는 것이 좋습니다. – PlasmaHH

답변

1

getch() 시스템이 특정 운영되지 않지만 직접 이식 할 수 없습니다. C++에서이 작업을 수행하는 가장 좋은 방법은 std::cin.get();입니다.

main 함수는 암시 적으로 return 0 일 수 있습니다 (실제로는 해당 코드가 필요하지 않습니다. 아래 참조).

int main() 
{ 
    // valid, return 0 implied. 
} 

main에서 암시 적 return 0에 대한 자세한 내용은 this question를 참조하십시오.

+0

'getch()'도 Windows 함수가 아닙니다. 그것은 MS-DOS에서 남겨둔 것입니다. (Windows에서는 유닉스 박스에서 저주의 일부입니다.) –

+0

충분하고 편집이 편합니다. – Chad

1

프로그램이 끝나면 터미널 창을 포함하여 해당 프로그램에서 생성 된 모든 리소스가 해제됩니다. getch를 사용하면 프로그램이 종료되지 않습니다. 이는 정상적인 동작이므로 Windows가 먼 메모리가 될 때까지 계속해서 작동해야합니다.

이미 존재하는 명령 창 내에서 프로그램을 시작하면 프로그램에 의해 생성되지 않았기 때문에 이 아닌이 닫히게됩니다.

+0

콘솔 창은 ** 프로그램에 의해 생성 된 리소스가 아닙니다. 프로그램이 끝나기 때문에 프로그램을 종료 할 이유가 전혀 없습니다. –

+0

@James의 경우 콘솔 창이 기존 프로그램이없는 경우 프로그램 대신 만들어집니다. Windows가 C++ 런타임을 지원하는지 여부는 모르지만 실행 프로그램에 속합니다. –

+0

Visual Studio에서 만듭니다. 콘솔 창에서 응용 프로그램을 호출하면 생성되지 않습니다. 그것은 Visual Studios에 속합니다. (그리고 Visual Studio는 실제로 열어두기위한 조치를 취해야합니다). –

0

먼저 getch()은 표준 C 또는 C++ 기능이 아닙니다. 심지어 Windows 아래에서, 나는 그 사용이 더 이상 사용되지 않는다고 생각한다; 그 의미론은 CP/M 과 초기 MS-DOS로 돌아 간다.

둘째로, 적어도 콘솔 앱에는 필요하지 않습니다 (콘솔 앱이 아닌 경우에는 라고 생각하지 않습니다). 콘솔 창에서 프로그램을 실행중인 경우 창이 계속 열려 있습니다. 그리고 Visual Studio에서 실행중인 이라면 프로그램을 차단하는 return 문에 중단 점을 설정하는 것이 간단합니다. 그리고 을 열어 두지 만 (실제로는 IDE가 닫히지 않아도됩니다. 귀하의 프로그램이 종료되었습니다).

+0

그리고 프로그램을 두 번 클릭하면 시작할 수 있습니까? 그것은 당신이 설명한 경우 중 하나에 해당하지 않습니다. –

+0

@Mark Ransom 두 번 클릭하여 콘솔 응용 프로그램을 시작하지 마십시오. 개발이 완료되면 콘솔에서 호출합니다. 또는 좀더 우아한 방식으로 잘 처리되는 일괄 스크립트에서. –

+0

왜 안 되니? 최적은 아니지만 잘 작동합니다. –

2

getch() 대신 _getch()를 사용하십시오.

관련 문제