10.4 프로젝트.c
int main(void) {
(중략)
char line[MAX];
char contents[MAX] = ""; -------------- ➌ 일기장에 입력한 내용을 저장할 변수(빈 값으로 초기화)
(중략)
if (strcmp(password, "skehzheld") == 0) { // 비밀번호가 맞았을 때
(중략)
printf("\n\n내용을 계속 작성하세요! 종료하려면 EXIT를 입력하세요.\n\n");
----------------------------------- ➊ 안내 문구
while (1) { ----------------------- ➋ 입력이 끝날 때까지
scanf("%[^\n]", contents); --- ➍ 줄바꿈 문자(\n) 전까지 한 문장씩 읽어 오기
getchar(); -------------------- ➎ Enter를 입력해 줄바꿈 문자 플러시 처리
}
} else {
printf("=== 비밀번호가 틀렸어요. ===\n\n");
}
return 0;
}
Note 플러시 처리
서식 지정자 %[^\n]으로 값을 입력받으면 줄바꿈 문자가 나오기 전까지의 문자열을 저장한다고 했습니다. scanf() 함수나 getchar() 함수로 입력받을 때 값은 변수에 저장되기 전에 입력 버퍼란 곳에 임시로 저장됩니다. 그래서 서식 지정자로 %[^\n]을 지정하면 변수에 저장할 때 문자열만 저장하고 줄바꿈 문자는 버퍼에 그대로 있습니다.
예를 들어, 사용자가 ‘일기를 씁니다’라고 입력하고 Enter를 누르면 scanf() 함수는 ‘일기를 씁니다’만 contents 배열에 저장하고 줄바꿈 문자는 버퍼에 그대로 남게 됩니다. 이 상태로 다시 반복하면 버퍼에 이미 줄바꿈 문자가 있기 때문에 다음 내용을 입력받을 수 없습니다. 그래서 Enter를 getchar() 함수로 입력받은 후 저장하지 않고 버립니다.
이렇게 Enter를 눌러서 입력받은 줄바꿈 문자를 버리는 것을 플러시 처리라고 합니다. 플러시(flush)는 우리말로 ‘씻어 없애다’라는 뜻이므로 버퍼에 남아 있던 줄바꿈 문자를 없애버리는 동작을 나타냅니다.