" 어떻게 누르면 피하기 위해 Enter함께 getchar()
? "
우선, 터미널 입력은 일반적으로 라인 또는 완전 버퍼링입니다. 이는 운영 체제가 터미널의 실제 입력을 버퍼에 저장한다는 것을 의미합니다. 일반적으로이 버퍼는 fe \n
가에서 신호 화 / 제공 될 때 프로그램으로 플러시됩니다 stdin
. 이것은 프레스에 의해 만들어진 fe Enter입니다.
getchar()
체인의 끝에 있습니다. 실제로 버퍼링 프로세스에 영향을 미칠 수있는 능력이 없습니다.
" 어떻게 할 수 있습니까? "
도랑 getchar()
다른 답변에서 잘 설명한 것처럼 터미널의 동작을 명시 적으로 변경하기 위해 특정 시스템 호출을 사용하지 않으려는 경우 우선 입니다.
불행히도 표준 라이브러리 기능이 없으며 단일 문자 입력에서 버퍼를 플러시하는 이식 가능한 방법이 없습니다. 그러나 구현 기반 및 비 휴대용 솔루션이 있습니다.
Windows / MS-DOS 에는 헤더 파일 에 getch()
및 getche()
함수 가 있습니다.이 기능은 conio.h
원하는 작업을 정확히 수행합니다. 줄 바꿈이 버퍼를 비울 때까지 기다릴 필요없이 단일 문자를 읽습니다.
주요 차이점 getch()
과 getche()
즉 getch()
동안 콘솔 바로 출력하지 실제 문자 입력을 수행 getche()
한다. 추가 "e"
는 echo를 의미합니다 .
예:
#include <stdio.h>
#include <conio.h>
int main (void)
{
int c;
while ((c = getche()) != EOF)
{
if (c == '\n')
{
break;
}
printf("\n");
}
return 0;
}
Linux에서 직접 문자 처리 및 출력을 얻는 방법은 cbreak()
및 echo()
옵션과 getch()
및refresh()
은 ncurses-library에서 루틴 입니다.
참고, 당신은 소위 초기화하는 데 필요한 표준 화면 과를 initscr()
과와 같은를 닫습니다 endwin()
루틴.
예:
#include <stdio.h>
#include <ncurses.h>
int main (void)
{
int c;
cbreak();
echo();
initscr();
while ((c = getch()) != ERR)
{
if (c == '\n')
{
break;
}
printf("\n");
refresh();
}
endwin();
return 0;
}
참고 : -lncurses
링커가 ncurses-library를 검색하고 찾을 수 있도록 옵션을 사용 하여 컴파일러를 호출해야합니다 .