• End of File

파일의 끝에 도달했을 때 인식하고 프로그램에게 전달할 수 있다

다른 정규문자와 중복되지 않게 #define EOF -1 으로 지정되어있다

stdio.h

 

일단 redirection이라는 개념이 나왔다 File과 관련된 기능같은데

운영체제에서 제공하는 기능이며 입력이나 출력 등을 파일로 한다는 기능 같다

ex) 항상 키보드로 입력을 받았지만 파일의 데이터를 받아 입력으로 처리한다

 

window는 Ctrl + Z 를 누르는 것으로 EOF를 생성한다

^Z = Ctrl + Z

입력한 문자 개수 만큼 1이 출력된다(빈칸,엔터 포함)

두번째 입력했을때(ab^Zcdefg) Ctrl + Z 부분까지 인식하고 1이 3번 나왔다

 

그 뒤의 cdefg도 버퍼에 남았을까 싶어 다시 입력했지만 새로 입력한 문자개수만큼만 나왔다

이유는 EOF를 인식할 경우 그 뒤로는 입력을 받아들이지 않기 때문이다

 

근데 이상한점이 있다 분명 while문에 EOF를 만나면 종료하라고 되어있는데 한번 더 문자열을 입력 받게되는 상황이다

 

이는 밑의 블로그에 자세히 설명되어있다

간단히 하면 다른 문자가 먼저 입력된 상태에서 ctrl + z 를 입력하면 26의 값으로 처리된다고 한다

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tipsware&logNo=221315155895 

 

[Q&A] EOF를 어떻게 입력하나요?

: C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 1. 질문 EOF는 'End of file'...

blog.naver.com

ios_base 클래스에서 정의되어 있고
이를 상속받은 iostream, fstream, stringstream 모두 동일하게 작동합니다.

 

cin은 EOF를 인식했을 때 ios_base 클래스에 정의되어 있는 eofbit, failbit 이라는 비트를 1로 설정한다고 한다

이는 ios_base를 상속받은 iostream, fstream, stringstream 모두 사용한다

 

그래서 EOF를 만났는지 안만났는지 알수있는법은 저 비트를 확인하면 되는데

 

eofbit는 cin.eof( ) 를, failbit는 cin.fail( ) 을 사용하면 알수있다

 


  • 2차원배열

말그대로 2차원처럼 보이는 배열이다

초기화

 

사실은 1차원으로 쭉 나열되어있긴하다

 

일차원배열과 비슷하게 [0]과 [0][0]의 주소는 같다 

 


  • if

조건에 따라 실행하는 구문이 생길때 사용한다

 

구성은

if ( test-condition )

   statement

 

test-condition이 참이면 statement를 수행한다

거짓이면 statement를 건너뛴다

 

거짓인 경우 다시 다른 조건을 확인하는 else if

 

거짓인 경우 무조건 수행하는 else

 


  • 논리표현식

한가지 이상의 조건이 논리연산자를 통해 맞는지(True) 아닌지(False) 값을 나타내는 표현식

 

 

1. || (논리합, OR) - 두개의 조건을 검사하며 둘중 하나라도 True면 True리턴 , 

                         그리고 시퀀스 포인트이기에 좌변의 부수효과가 있다면 || 에서 무조건 실행되고 우변이 평가된다

 

b는 0으로 초기화 되어 있다

 

첫조건 b++ > 0 에서  ++는 접미에 있기에 > 보다 연산자 순위가 낮기에 >먼저 실행된다

 

그럼 0 > 0 이므로 false

 

그후에 || 가 시퀀스 포인트이므로 증가연산자가 실행된다(이때  b = 1)

 

그리고 다음 조건인 b > 0 을 실행한다

 

두번째 조건에서는 b가 1이기에 1 > 0 이므로 최종으로 true이다

 

 

 

2. && (논리곱, AND) - 두가지 조건을 검사하고 모두 True여야 연산의 결과가 True이다

 

 

 

3. ! (논리부정, NOT) - 하나의 조건의 값을 뒤집는다 ( True -> False, False -> True )

                             &&, || 보다 우선순위가 높은 편이다

 

논리부정은 0(Null)인지 아닌지 체크하는데 편리하다

 

 

+ Recent posts