문제

나는 사용 중입니다 getch() 그리고 내 앱은 즉시 충돌합니다. 할 때 포함 :

int main()
{
    getch();
}

나는 링크를 찾을 수 없지만 문제는 그 선을 따라 버퍼링이나 이상한 것을 끄는 것이 필요하다는 것입니다. cout 크로스 플랫폼 코드와 함께 작동합니다.

나는 사용하라는 지시를 받았다 std::cin.get(), 그러나 사용자가 문자 나 번호로 입력 한 다음 Enter를 눌러 종료하기 위해 키를 누르면 앱이 종료되기를 바랍니다.

이것에 대한 기능이 있습니까? 코드는 Mac (내 OS) 및 Windows에서 작동해야합니다.


연결/컴파일은 아닙니다 문제; 나는 포함한다 <curses.h> 그리고 링크 -lcurses Xcode에서는 Windows가 사용하는 동안 <conio.h>.

도움이 되었습니까?

해결책

당신은 들어 보셨습니까? <curses.h> 무엇을 확인하기 위해 getch() 기능은?

힌트 : OSX와 Linux는 Windows와 같지 않습니다.

구체적으로, 매크로로서 <curses.h>, 우리는 찾는다:

#define getch() wgetch(stdscr)

이제 시스템에 실제 기능이있는 것으로 보입니다. getch() Curses 라이브러리에서는하지만 기대합니다 stdscr 설정하려면 Curses 초기화 함수에 의해 수행됩니다 (initscr() 그리고 친척), 그리고 그것은 당신의 코드에 의해 신사적으로 수행되지 않습니다. 따라서 올바른 초기화가 수행되기 전에 Curses 루틴을 호출하여 코드가 정의되지 않은 동작을 호출하여 충돌로 이어집니다.

(DMCKEE의 좋은 힌트 - 그것은 중요했던 acidzombie24에서 링크 라인을 얻는 데 도움이되었습니다.)

단일 키 스트로크를 읽고 프로그램을 깨끗하게 종료 할 수있는 지점에 도달하려면 Unix (OSX, Linux)에서 많은 작업을 수행해야합니다. 터미널의 초기 상태를 가두어 야합니다. atexit() 함수 - 또는 유사한 메커니즘 - 터미널의 상태를 복원하고 터미널을 요리 모드에서 원시 모드로 변경 한 다음 기능을 호출하여 문자를 읽습니다 (아마도 그냥 가능합니다. read(0, &c, 1)), 그리고 당신의 출구를하십시오. 다른 방법이있을 수 있지만 확실히 설정 및 파열 작업이 필요합니다.

도움이 될 수있는 책 중 하나입니다 고급 유닉스 프로그래밍, 2nd Edn Mark Rochkind에 의해; 필요한 수준의 터미널 처리를 다룹니다. 또는 사용할 수 있습니다 <curses.h> 적절하게-그것은 롤 당신의 솔루션보다 간단하고 더 신뢰할 수있을 것입니다.

다른 팁

당신은 전시하지 않았습니다

#include <stdio.h>

또는

#include <curses.h>

또는 유사한 라인. 당신은 당신이 도서관과 연결하고 있다고 확신하십니까? 포함 getch()?

cin.get () 함수를 사용하여 다음과 같습니다.

#include <iostream>

using namespace std;

int main()
{
  char input = cin.get();

  cout << "You Pressed: " << input;
}

그런 다음 프로그램은 키를 누를 때까지 기다릴 것입니다.

일단 당신이 누르면, 당신이 누르는 키가 화면에 인쇄됩니다.

그만큼 getch Unix와 같은 시스템에서는 기능을 사용할 수 없지만 컴파일러를 통해 콘솔 명령으로 교체 할 수 있습니다. system 기능.

용법:

창에서 사용할 수 있습니다 system("pause");

UNIX와 같은 시스템 (예 : OSX)에서 사용할 수 있습니다. system("read -n1 -p ' ' key");

메모: system 선언됩니다 <stdlib.h>.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top