-
C언어 while EOF scanf 작동안할 때 참고컴퓨터/C & C++ 2017. 11. 15. 23:32728x90반응형
아래와 같은 코드를 실행하면
// Main int main(void) { char str[255]; int a, b, c; while (c = getchar() != EOF) { printf("\nSTRING: "); scanf("%s", str); printf("\nINT AND INT: "); scanf("%d %d", &a, &b); printf("\nCTRL+Z will break while."); } }
위 사진처럼 CTRL+Z를 계속 누르는데 안꺼지는 상황이 발생한다.
이유는 다음과 같다.
scanf("%s", str) 을 불렀다. \n이 stream에 남고 다음 scanf("%d %d", &a, &b) 을 부른다.
하지만, scanf는 ENTER키를 누르면서 발생하는 \n을 consume하지 않는다. (getchar()=\nEOF 가 된다고 생각하자)
때문에 마지막 scanf 다음에 getchar()을 하면 \n을 consume 해주고 CTRL+Z를 누르면 원하는 부분에서 꺼진다.
int main(void) { char str[255]; int a, b, c; while (c = getchar() != EOF) { printf("\nSTRING: "); scanf("%s", str); printf("\nINT AND INT: "); scanf("%d %d", &a, &b); getchar(); printf("\nCTRL+Z will break while."); } }
728x90'컴퓨터 > C & C++' 카테고리의 다른 글
C/C++ Entity Component System (Flecs) (0) 2020.08.04 C언어 스트링(string)들로 구성된 배열(array) 만들기 (0) 2017.11.15 Visual Studio 2017 빈 프로젝트 만들기 (0) 2017.09.23