scanf괄호 내에서 띄어쓰기 하는 거랑 안 하는 거랑 무슨 차이인가요?

익명 사용자의 이미지

예를들어 이런 scanf가 있으면
예시 1 : scanf("%d %c %d %c",......);
띄어쓰기를 안하면
예시 2 : scanf("%d%c%d%c",,,,,...); >>>이렇게 되는데, 그럼 %c에서 공백을 문자로 받던데 왜 형식지정자끼리 띄어쓰면(위의 예시 1) 그런 현상이 안 나타나는 것일까요

세벌의 이미지

raymundo의 이미지

포맷문자열에 있는 띄어쓰기, 즉 스페이스도 엄연히 의미가 있어서, 입력에 있는 공백문자(스페이스, 탭, 뉴라인)의 덩어리에 매치되어 입력을 받게 됩니다.

scanf(" ");   # 1개 이상의 스페이스/탭/개행을 읽음 (스페이스만 읽는 게 아니라)
scanf("\t");  # 마찬가지
scanf("\n");  # 마찬가지

그래서 예시1에서는 입력한 공백이 저 스페이스에 매치되어 읽히고 그 다음 공백 아닌 문자가 %c에 매치되는 거고, 예시2에서는 첫 공백 문자가 %c에 매치되어 버립니다.

좋은 하루 되세요!