본문 바로가기
Problem Solving

scanf로 EOF까지 입력 받기

by chuckolet 2019. 1. 17.

Introduction

scanf는 성공적으로 받아온 포맷문자의 수를 return합니다. 
만약 에러가 발생하거나 EOF(End of File)을 만나면 -1을 리턴합니다. 
EOF는 콘솔에서 ctrl + Z or ctrl + D로 입력이 가능합니다. 

문자열을 끝날 때 까지 입력 받는 방법 

1. while (scanf("%d", &n) != EOF) 
2. while (scanf("%d", &n) != -1) 
3. while (~scanf("%d", &n)) 

EOF는 -1을 나타내므로 1과 2는 같은 방법입니다. 

3번의 ~는 NOT입니다.

-1은 2진수로 표현하면 1111 1111 ... 1111 입니다. 
-1에 ~를 붙이면 0000 0000 ... 0000 즉 0이 됩니다. 
그래서 scanf로 EOF(-1)을 받으면 0을 반환해서 while문을 빠져나올 수 있습니다.

References

http://donggod.tistory.com/55


제 글이 도움이 되셨다면 간단하게 '공감', '댓글' 부탁드립니다!



댓글