본문 바로가기
C언어/따배씨 c언어

[8.2] 파일의 끝

by newbeverse 2022. 11. 5.

\\\

우선 아래것 부터 이해해보자.

while ((c = getchar())

바로 이렇게 while 문이 설정된 경우 

while ((c = getchar() == 1)

이것과 위의 것은 동일한 코드이다.

실행시켜보면 문자를 입력한다면 while 문은 계속 작동한다. 왜냐하면 getchar 함수에 문자가 들어간 경우 1이 되기 때문이다.

 

반면에 아래 같은 함수도 있고 위의 함수와 똑같이 작용한다는것을 알수 있다..

while(c = getchar() != EOF)

EOF는 마우스를 갖다대보면 ( - 1 )로 표시되어있고 getchar 함수가 -1이  아니라면 계속 while문이 돌아가게 된다.

-1 을 표시하는 방법은 ctrl + z 키를 눌러서 ^Z를 입력하면 된다. (약속이다. 또다른 방법은 ctrl + c == 커멘드 강제종료) 

EOF 는 end of file 의 축약어로 파일의 끝에서 더 이상 문자를 입력받지 않으니 종료된다라는 의미로 사용하기 위해 만들었다고 생각된다.

 

왜 이런 동작이 가능할까

getchar 함수에 마우스를 대보면 int 자료형으로 입력값을 받는다고 나타난다. 이것으로부터 우리는 getchar 형이 - 부터 + 까지의 정수를 받는다는 것을 알 수 있다. ( +만 받는 것은 unsigned int )

또한 getchar함수는 char자료형의 범위안( -128~ 127 )에서 입력값을 받는다.

그런데 ASCII 코드를 찾아보면 char자료형으로 0 ~ 127 까지만 쓰이고 -부분은 쓰이지 않는다는 것을 알 수있다.

그럼 -(마이너스)  어디에 쓰일까?

위와 같이 더이상 문자를 받지 않았을 경우 -1 을 입력해서 종료하기 위함이라고 생각된다.

 

아래는 예제이다

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	char c;

	while ((c = getchar()) != EOF) // End Of File
		putchar(c);

	return 0;
}

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

반응형