컴퓨터를 공부하고자 마음먹은지 N일차

[26일차](홍정모의따배c)파일의 끝(Mac-Xcode C언어 환경에서 EOF입력하는법) 본문

🖥C

[26일차](홍정모의따배c)파일의 끝(Mac-Xcode C언어 환경에서 EOF입력하는법)

졸린새 2020. 10. 4. 00:04
728x90

[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로 정상적으로 입력처리되며 프로그램은 끝난다.

Comments