- End of File
파일의 끝에 도달했을 때 인식하고 프로그램에게 전달할 수 있다
다른 정규문자와 중복되지 않게 #define EOF -1 으로 지정되어있다
일단 redirection이라는 개념이 나왔다 File과 관련된 기능같은데
운영체제에서 제공하는 기능이며 입력이나 출력 등을 파일로 한다는 기능 같다
ex) 항상 키보드로 입력을 받았지만 파일의 데이터를 받아 입력으로 처리한다
window는 Ctrl + Z 를 누르는 것으로 EOF를 생성한다
입력한 문자 개수 만큼 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)인지 아닌지 체크하는데 편리하다