character constant 와 string constant 의 구분

bm142857 Reply 9 years 32 weeks ago
두가지 코드가 있습니다 #include <stdio.h> #include <stdlib.h> int main() { int c, nl; nl = 0; while( (c=getchar()) != EOF) if( c=='\n') ++nl; printf("%1d", nl); } 다음은, #include <stdio.h> #include <stdlib.h> int main() { int c, nl; nl = 0; while( (c=getchar()) != EOF) if( c=="\n") ++nl; printf("%1d", nl); } 다른 점은 '\n' 이냐 '\n'이냐 그 차이인데, 제가 교재를 통해서 이해한 바로는 '\n'은 개행 문자의 아스키 코드값을 대응시키는 것 같고 "\n"은 \n 이라는 문자 자체를 대응 시키는것 같습니다만, 실제로 첫번째 코드에 '\n' 대신에 아스키 코드에서 \n에 대응되는 숫자값 10을 넣었더니 똑같이 작동 하더군요, 그런데 두번째 코드에서는 만약에 입력값에 \n이 하나가 나왔으면 EOF에서 값이 1이 나와야 하는거 아닌가요 ? (한번 나왔으니까) 잘이해가 안되네요, 첫번째껀 character constant이고 두번째 건 string constant 라는데.
booksky Reply 9 years 32 weeks ago
안녕하세요 조교 이은헌입니다. 일단 constants의 정의부터 확실히 짚고 가야할듯 합니다. 컴퓨터가 사용하는 constants는 크게 따지면 4종류입니다. 정수, 실수, 문자, 문자열. 이 중 문자를 표현하기 위해 사용하는 것이 ''로 감싸주는 것이고, 문자열을 표현하기위해서는 ""로 감싸주게 됩니다. 즉 '₩n'은 newline을 나타내는 문자 1개를 의미하며, 문자열은 문자의 배열과 같기때문에 "₩n"은 ₩n₩0과 같은 의미를 지니게 됩니다. c는 문자이기때문에 문자열과 같은지 틀린지 비교할 수 없으며 오직 문자는 문자끼리만 같은지 비교할 수 있습니다. 문자열과 문자열을 비교하려면 strcmp라는 함수를 사용해야합니다 c는 문자이기때문에 문자열과 같은지 틀린지 비교할 수 없으며 오직 문자는 문자끼리만 같은지 비교할 수 있습니다. 문자열과 문자열을 비교하려면 strcmp라는 함수를 사용해야합니다 사실 지금 질문의 의미를 잘 파악하지 못해서 원하는 답변은 못 드겠네요... EOF가 1이 된다는게 무슨 의미인지 다시 물어보시면 이에대해 답변해드리겠습니다
bm142857 Reply 9 years 32 weeks ago
음... 어디서부터 물어봐야 할지 모르겠어요 !! 일단 확실하게 '\n' 과 "\n" 의 차이를 잘 모르겠구요.. 문자열과 문자가 어떻게 다른 건지도 모르겠습니다! 이 2개가 가장 궁금해요,..
booksky Reply 9 years 32 weeks ago
문자와 문자열의 차이는 1단원 1.9장에서 다룹니다. 문자는 'a', 'Z', '0'등 1개의 글자만을 담는 것을 문자라고 합니다. 즉 문자는 오직 1개만을 담을 수 있기 때문에 'abc'같은 표현은 잘못된 것이곘지요. 문자와 다르게 문자열은 여러개의 문자들을 담을 수 있습니다. "TEST"처럼 말이죠. 문자열은 문자 여러개를 담아야하기 때문에 char의 배열로 표시됩니다. 즉 1개짜리 문자가 여러개 모이면 문자열이 되는 것입니다. 그러면 'a'나 "a"나 1개짜리 문자 하나를 담기때문에 똑같지 않을까 생각될 수 있습니다만, 둘은 명백하게 다릅니다. 1.9장의 getline코드를 보시면, getline 실행 마지막에 '\0'이라는 값을 배열에 넣는 것을 확인할 수 있습니다. \0은 null value라고 하며, 문자열의 끝을 컴퓨터에게 알려주는 장치로 들어갑니다. 만약 \0이 문자열에 들어가지 않으면 컴퓨터는 \0을 만날때까지 끝없이 다른 값들을 확인하게 됩니다. 즉 'a'와 "a"를 비교해보면 ┌─┐ │ a│가 'a'고 └─┘ ┌─┬──┐ │ a│ \0│가 "a입니다. └─┴──┘ 이런 식으로 'a'와 "a"는 명백하게 다릅니다. 그렇기 때문에 문자와 문자열은 비교할 수 없습니다.
bm142857 Reply 9 years 32 weeks ago
흐.. 아직 헷갈리긴 하는데 그래도 알 것 같아요 =0= 감사합니다....