2013-08-29 14 views
4

커맨드를 루프로 입력 할 수있는 대화 형 콘솔 응용 프로그램을 만들고 싶습니다. 예를 들어, 사용자 유형 "검색"과 프로그램은 일부 데이터를 찾아이를 화면에 인쇄합니다. 그런 다음 프로그램은 다음 명령 (검색, 종료 또는 기타)을 기다립니다. 사용자의 편의를 위해 내 프로그램에서 명령 내역을 지원하기를 원합니다 (예 : 키보드의 위아래 화살표를 누르면 터미널에서와 같이). 그러나 나는 scanf, std :: getline, std :: cin 등으로 더 읽을 수있는 텍스트를 어떻게 인쇄해야할지 모르기 때문에 어떻게하는지 깨닫지 못한다. 코드 std::cin << "hello";이 컴파일되지 않았습니다 ('std :: cin < < "hello"에서'operator < < '과 일치하지 않음). 기능 fprintf(stdin, "hello");은 아무것도 인쇄하지 않으며 scanf는이 인쇄 된 메시지를 읽을 수 없습니다. 및 scanf("%s", s);gets(s) 등등은 printf 또는 std::out에 의해 출력 된 텍스트를 읽을 수 없음을 알 수 있습니다. 그래서 문제는 : stdin (std::cin) 인 콘솔에 텍스트를 인쇄하려면 어떻게해야합니까? 아니면 명령 이력을 구성하는보다 우아한 방법이 있을까요?콘솔 응용 프로그램에서 명령 기록을 만드는 방법은 무엇입니까?

P. 또한 필요한 텍스트를 인쇄하기 위해 버튼을 누르는 시뮬레이션에 대해서 생각했지만 명령 기록을 만드는 더 좋은 방법이 있기를 바랍니다.

P.P.S. 나는 리눅스와 C++을 사용한다.

+0

표준 I/O가 화면없이 systemw에서 시작되었지만 프린터로 시작된 것을 기억하면 도움이됩니다. 'printf'는 말 그대로 인쇄 된 텍스트입니다. 'scanf '로 그 내용을 읽으려면 작업자가 실제 종이 출력물을 스캐너에 공급할 필요가있었습니다. – MSalters

답변

3

정확하게 그 목적을 위해 만들어진 readline and history libraries을 사용한다.

+0

이들의 GNU 버전은 GPL로 라이센스 된 모든 코드가 필요합니다. –

1

당신이 Kerrek SB 제안 사람들은, 다른 방향으로 생각하는 것 같은 라이브러리를 사용하지 않으려는 경우 :

1) 무엇이 역사에 있어야 명령? -> 모든 명령은 사용자가 입력합니다. 2) 사용자가 입력 한 내용을 어떻게 압니까? -> 당신이 std에서 가져 오기 :: 에 3) 명령으로 무엇을합니까, 당신은 std :: in에서 얻을 수 있습니까? -> 사용자가 처리합니다 (예 : 사용자가 '검색'을 입력했을 때 검색 시작).

3 단계 이외에도 사용자가 내부적으로 입력 한 명령을 저장할 수 있습니다 (예 : 특정 종류의 벡터). 이제 사용자가 명령 기록을 사용하고 '키 업'(또는 '키 다운')을 누르면 내부 벡터에서 해당 명령을 찾습니다. 그는 나중에 '엔터'를 누른다? 내부 명령 기록에서 선택한 사용자를 처리하십시오.

+0

필자는 그것에 대해 생각했지만 '입력'을 누르기 전에 명령을 변경하려고 할 수 있습니다. 예를 들어, 그는 명령을 실수로 고치고 정정 명령을 시작하려고합니다. 따라서 '키 업'및 '입력'버튼을 추적 할 수는 없습니다. – user2717575

관련 문제