문제

나는 혼란스러워한다 getchar()다음 코드의 역할. 나는 그것이 내가 누를 때만 닫히는 출력 창을 보는 데 도움이된다는 것을 알고 있습니다. 입력하다 열쇠.

그래서 getchar() 기본적으로 Enter를 누르기를 기다린 다음 단일 문자를 읽습니다.

이 기능이 읽는 단일 문자는 무엇입니까? 키보드에서 키를 읽을 수 있도록 키를 누르지 않았습니다.

이제 아무것도 읽지 못할 때 왜 "이봐, 당신은 내가 읽을 수있는 아무것도 입력하지 않았다"는 오류가 없습니까?

#include <stdio.h>

int main()
{
    printf( "blah \n" );
    getchar();
    return 0;
}
도움이 되었습니까?

해결책

그만큼 getchar() 기능은 단순히 문자를받을 때까지 대기하여 프로그램이 진행될 때까지 프로그램을 유지합니다.

Enter 키를 누르면 캐릭터가 전송됩니다. Windows OS에서는 캐리지 리턴 (CR)과 라인 피드 (LF)를 보냅니다.

보다 이 CodingHorror 게시물 잘 설명하기 위해.

(... CR+LF 부분의 설명은 getchar() 차단 부분)

다른 팁

getchar ()가 a이기 때문입니다 블로킹 기능.

당신은 읽어야합니다 차단 기능, 기본적으로 프로세스를 만듭니다 기다리다 어떤 일이 일어나기 위해.

이것의 구현 대기 중 동작은 기능에 따라 다르지만 일반적으로 일부 이벤트가 발생하기를 기다리는 루프입니다.

의 경우 getchar() 함수, 이것은 아마도 파일을 지속적으로 읽는 루프로 구현 될 수 있으며 (이 경우 stdin) 파일이 수정 된 날씨를 확인합니다. 파일이 수정되면 루프는 다른 작업을 수행하여 동작합니다.

이 시도:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char ch;

    printf("I'm now going to block until you press something and then return... ");

    ch = getchar();

    if (ch >= 0)
       printf("\nYou pressed %c\n", ch);
    else
       printf("\nAliens have taken over standard input! Run!\n");

    return 0;
}

getchar() 키보드 (또는 STDIN에 첨부 된 내용) 인터럽트가 접수 될 때까지 프로그램이 잠을 자게됩니다. 이것은 차단되고 있음을 의미합니다. 추가 코드가 실행되지 않습니다. getchar() 보고.

매우 도움이됩니다. 반환 값 그것을 이해하기 위해 함수의.

차단을 방지하기위한 메커니즘을 제공하지 않는 한 모든 함수는 차단 될 수 있습니다. 예를 들어, open() 허용 O_NONBLOCK 모뎀과 같은 장치를 느리게 열리는 데 도움이되는 플래그. 요컨대, 터미널에서 입력되거나 커널이나 일부 장치에서 답을 얻기 위해 기다려야하는 경우 차단할 가능성이 매우 높습니다.

getChar ()는 키가 눌러질 때까지 프로그램의 실행을 차단합니다. 따라서 키를 누르지 않으면 오류가 없습니다. GetChar ()는 발생할 때까지 기다립니다. :)

GetChar가 어떻게 행동하는지에 대해 자세히 알아볼 수 있습니다.http://www.cppreference.com/wiki/c/io/getchar... 이것은 당신의 질문에 답해야합니다 :)

나는 당신을 혼란스럽게 생각하는 것은 프로그램이 계속되기 위해 Enter 키가 필요하다는 것입니다. 기본적으로 터미널은 ENTER가 눌러질 때까지 모든 정보를 C 프로그램으로 전송하기 전에 모든 정보를 버퍼링합니다.

보다 여기에서 문제에 대한 논의

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