2017-09-06 12 views
0

저는 초보 프로그래머로서 C에 대해 소개하고 있습니다. scanf()가 작동하는 방식에 대해 근본적인 것이 빠져 있습니다. 이 같은 코드를 사용하여 키보드에서 단일의 int를 읽고 싶어 : 나는이 코드를 실행하면 내가 디버깅을 중지 할 때까지키보드에서 입력되지 않은 경우 scanf()에서 입력을 읽는 위치는 어디입니까?

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    int userBookSelection; 
    scanf("%i", &userBookSelection); 
    printf("Printing userBookSelection: %i", userBookSelection); 

    return EXIT_SUCCESS; 
} 

이 콘솔은 검은 유지됩니다. 키보드 입력을 기다리는 커서는 없습니다.

인쇄 userBookSelection : 내가 Windows에서는 MinGW의 GCC 컴파일러를 이클립스에서 디버깅하고 있습니다 2,130,567,168

내가 디버그를 중지하면 나는 콘솔에서이 출력, 같은 모든 시간을 볼 수 있습니다. 코드 구문이 정확하다고 보입니다. 빌드 경로에 문제가있을 수 있습니까? scanf()가 키보드 입력을 읽지 않는 이유를 알아야합니다.

+0

코드를 어떻게 실행하고 있습니까? – SLaks

+1

코드를 실행할 때 의도 한대로 작동합니다. – Tyler

+0

표시된 프로그램은 올바른 ISO C입니다 (최대 점 :'scanf'가 지정된대로 손상되어 프로덕션 환경에서 사용해서는 안됩니다).하지만 이런 종류의 학습 운동은 괜찮습니다) 의도 한대로 작동해야합니다. _ 정확히 어떻게 컴파일러, 디버거, 콘솔, 운영 체제 등을 사용하고 있습니까? 아무것도 남겨 두지 마십시오. – zwol

답변

0

저는이 버그를 처리하는 교수의 코드 라인을 얻었습니다.이 코드는 Eclipse 및/또는 MinGW에만 필요한 필수 솔루션 이건 확실하지 않습니다.

int main(void) { 
    int userBookSelection; 
    setvbuf (stdout, NULL, _IONBF, 0);//<---The magic line 

    scanf("%i", &userBookSelection); 
    printf("Printing userBookSelection: %i", userBookSelection); 

    return EXIT_SUCCESS; 
} 

내가 (어떤 setvbuf를 무슨 일이 일어나고 있는지에 대한 추가 지혜를 감사하겠습니다)하고있는 방법과는 scanf()가 더 근본적으로 작동한다 : 어떤 경우에, 여기에 추가 라인 코드입니다.

+0

Eclipse, MinGW 및/또는 Windows "콘솔"의 기발함이어야 함 - C 사양 만 사용하고'setvbuf'를'stdout'에 적용하면'scanf '에 대한 호출에 아무런 영향도 미치지 않습니다. 단지'stdin'으로 만). 그 이상으로 널 도울 수 없어. – zwol