[26일차](홍정모의 따배c)파일의 끝 (Mac/xcode C언어에서 EOF)
*본 강의수기는 교수님의 모든 ppt나 코드 화면을 붙인게 아닙니다. 따로 출처 표시나 과제표시
안한 모든 코드와 사진자료의 출처는 본 강의의 교수님 입니다.
정리는 다시한번 제가 보기위함과 어떤강의인지 알려드리는 것이고
제가 적은건 이해를 돕기 위한 부연설명과 제가 이해한 몇개의 중심적인 내용이 다소
생략이 되었습니다. 이 수기를 통해 공부하려 하지말고 흥미로운 내용이라면
'인프런- 홍정모의 따라하며 배우는c' 과정을 수강하시길 바랍니다.
아직 파일이라는 개념은 배우지 않았지만,
여태 배운걸 토대로 생각하면,
파일이 끝난다하면 실행이 종료된다는것을 유추할 수 있다
- 교수님코드
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
return 0;
}
여기서
EOF라는 코드가 나온다.
EOF는 End Of File의 약자
보통은
while ((c = getchar()) != '.')
이나
while ((c = getchar()) != 'q')
등 특정 문자를 입력받게해서
멈추게 하지만
EOF의 값은 -1이다.
즉 getchar로 받은 값이 -1이어야 한다는 것인데
아스키코드에 음수는 없다.
그래서 따로 getchar에 -1을 받게하는 코드가 있는데
바로
' ^z ' 이다.
(ctr +z)
입력과동시에 프로그램이 끝난다.
xcode에서 커맨드나 컨트롤을 어떻게 입력받게할지 모르겠당.
그런데,
한가지 의문이 들수도있다.
^z는 그냥 컴파일러나 프로그램내부 종료 명령어아냐?
-1을 받는게아니라 자체 명령어로 프로그램이 종료되는것이 아니냐 생각이 들수도있다는것이다
아니나 다를까 교수님께서 그 의문을 해결해줄 코드를 보여주신다.
- 교수님코드
while(1)
{
c = getchar();
printf("%d\n", c);
if (c == EOF)
break;
}
문자를 입력받고 break조건문에 들어가기 전,
입력받은 문자의 아스키코드값을 보여주는 코드다.
온라인 컴파일러도 이상하다
그냥 검색을해보자 xcode에다가 EOF값을 받으려면 도대체 어떻게 하는지
맥에선 ctr + D를 입력해야 한다.
하지만 입력하고 엔터를 누르는게 아니라
그냥 컨트롤 D를 입력한 행위자체를 EOF로 받아들인다.
입력창에
^D를 입력할수 없다는것이다
하지만 -1로 정상적으로 입력처리되며 프로그램은 끝난다.