none
scanf함수 궁금점 RRS feed

  • 질문

  • 이차방정식의 판별식을 통해 두 실근을 갖는지 중근인지, 두 허근을 갖는지 알기위한 간단한 코딩을 했습니다.

    그러던 중  scanf함수에서 궁금한 점이 발생 했는데요.

    scanf("%lf", &a);

    printf("bla bla");

    이렇게 되면 정상적으로 a값을 입력후 다음행의 printf의 내용이 출력 되는데

    scanf("%lf ", &a);

    printf("bla bla");

    와 같이 %lf후 공백을 두게되면 a값 입력후 다음 행이 실행되지 않고 계속 입력만 가능한 상태가 됩니다.

    %d, %f %lf 뒤에 공백을 주면 왜 다음 행이 실행이 되지 않는지 궁금합니다.

    2017년 9월 18일 월요일 오전 6:28

모든 응답

  • scanf 함수는 첫번째 format 파라미터에서 기술한 형식이 만족될 때 까지 standard input stream 에서 입력을 받게 되어있습니다.

    scanf("%lf", &a); 의 경우에는 한 번의 숫자 입력으로 "%lf" 입력이 만족되지만 

    scanf("%lf ", &a); 의 경우에는 공백 문자 때문에 한 번의 숫자 입력으로 만족되지 않는 것으로 보입니다.

    MSDN에서 찾아보니 scanf format 파라미터에서 공백 문자의 의미는 다음과 같이 기술되어 있네요.

    White-space characters: blank (' '); tab ('\t'); or newline ('\n'). A white-space character causes scanf to read, but not store, all consecutive white-space characters in the input up to the next non–white-space character. One white-space character in the format matches any number (including 0) and combination of white-space characters in the input.

    https://msdn.microsoft.com/ko-kr/library/windows/desktop/kwwtf9ch%28v=vs.100%29.aspx?f=255&MSPPError=-2147217396

    2017년 9월 20일 수요일 오전 4:16