zyechun   2년 전

마지막에 scanf가 EOF 읽을 때

getchar()가 ' '를 안읽어서 

마지막 문자 count를 출력할 때 올리는데

왜 안 될까요??

sgchoi5   2년 전

입력처리를 중복으로 하셨네요. 하나로 처리하시면 될 듯..

while ((c = getchar()) != EOF && c != '\n') {

..

}

공백으로 시작하거나 공백으로 끝나는 경우를 고려해주시면 됩니다. : )

zyechun   2년 전

답변해주셔서 감사합니다 !


scanf로 공백문자 전까지 문자열을 읽고, getchar()로 공백문자를 읽으려고 두개를 썼어요.

I am a boy를 입력한다면

scanf가 I를 읽고 getchar()가 I 다음의 공백문자를 읽고

그 다음 scanf가 am을 읽고 getchar()가 am 다음의 공백문자를 읽고...

이런식으로 해서 마지막에 scanf가 EOF를 읽었을 때 종료하게 만들었는데 오류가 뜨네요..


while ((c = getchar()) != EOF && c != '\n') {

..

}

그런데 위의 코드처럼 쓰면은 EOF의 character가 있다는 말인데

EOF의 character가 존재하나요??

sgchoi5   2년 전

EOF 는 header 에 정의되어 있는 macro 입니다. 

https://ko.wikipedia.org/wiki/... 에서 ascii table 의 첫 번째 null character 를 의미합니다.

C/C++ 언어에서는 char 형태의 메모리 저장소에 문자열이 저장된 경우에 null character 를 가지고 문자열의 끝을 처리하게 됩니다.

예를 들어, scanf 로 %s 로 문자열을 입력받는 경우에 null character 가 마지막에 붙게 됩니다. (다른 string 처리함수 동일)

반대로 내가 임의로 문자열을 만들어서 전달하는 경우에도 null character 를 꼭 마지막에 넣어주어야 합니다.


http://gooddaytocode.blogspot.... 에 가셔서 입력 처리관련 내용 참고하시길..

댓글을 작성하려면 로그인해야 합니다.