2016년 3월 17일 목요일

Return Value of 'scanf' Function

scanf 반환 값은 입력 받을 서식문자 중 성공한 서식문자의 개수를 반환합니다.

예를 들면,
int a,b,c;
 scanf("%d %d %d", &a, &b, &c) 가 있을 때, 정수 3개 입력이 아닌 5 3 c를 입력하면 2가 반환 됩니다.

예외가 발생하면 EOF로 반환 된다고 알고 있는 사람들이 많습니다.
하지만 무조건 EOF를 반환하지 않습니다. ( #define EOF (-1) )

문자열 충돌이나 제어 문자열의 내용이 맞지 않는 경우 등등이 예외가 발생하는데,
예외가 발생해도 성공한 입력인자의 개수들은 반환해줍니다.

EOF를 반환하는 경우는 인자를 통해서 값을 하나도 전달 받지 못한 상태에서 입력 내용과 제어 문자열의 충돌도 일어나지 않고 파일의 끝을 만난 경우 함수는  EOF를 반환합니다.


ex) 이 소스는 무슨 의미 일까요?
for(; ~scanf("%d", &a) ; )

cf)
!는 logical operator not
~는 bitwise operator not 입니다.
~(0) 하면 8비트 기준 11111111 이 되기 때문에
~(-1) 해야 00000000이 됩니다.

anwser)
인자를 통해서 값을 하나도 전달 받지 못한 상태에서 파일의 끝(입력 서식문자의 끝)을 만난 경우 EOF를 리턴하여 
for문의 조건이 ~(EOF) 즉 false(0)이 되기에 for문을 빠져 나옵니다.
그러지 않으면 for문을 계속 돌게 됩니다.



reference : 'C: A Reference Manual' Book

댓글 없음:

댓글 쓰기