Skip to main content

[C++ Primer Plus] Chapter 6. 분기 구문과 논리 연산자

C++ 기초 플러스 책을 읽고 공부한 노트입니다.




연산자 우선순위 #

연산자 결합규칙
::
(괄호묶기, 함수호출, 값 생성) [] . -> ++ --
const_cast dynamic_cast reinterpret_cast static_cast typeid
! ~ + - ++ -- & * (형변환)
sizeof alignof new delete noexcept
.* ->*
* / %
+ -
<< >>
< <= >= >
== !=
&
^
|
&&
||
:?
= *= /= %= += -= &= ^= != <<= >>=
throw
,



cctype 라이브러리 #

함수명 쓰임새
isalpha 영문자인가?
isdigit 숫자인가?
tolower 소문자로
toupper 대문자로



switch 구문 #

  • case 레이블은 그 값이 int형이어야 한다. (enum 가능)
  • 많은 구현체들이 switch문을 jump table로 구현하기 때문에 if else보다 실행 속도면에서 효율적이다.
  • 보통 if문이 3개일때까지는 if else문이 빠르고 그 이상은 switch문이 빠르다. 하지만 그 속도 차이가 미미해서 가독성을 더 고려하는 것이 좋겠다.



루프로 읽기 #

int n;   
cin >> n;
  • 여기서 수 대신 문자를 입력하면 벌어지는 일

    • (1) n의 값은 변하지 않는다.
    • (2) 입력 큐에 잘못된 입력이 그대로 유지된다.
    • (3) cin 객체에 에러 플래그가 설정된다.
    • (4) cin 메서드 호출이 false(bool형으로 변환된다면)를 리턴한다.
  • 따라서 다시 입력을 재개하려면

    • (1) cin을 초기화한다.
    • (2) 불량입력을 제거한다.
while (!(cin >> golf[i]))  // 제대로 입력하면 종료 하고 아니면 다시 입력 재개
{
    cin.clear();
    while( cin.get() != '\n' ) continue;
}



텍스트 파일 쓰고 읽기 #

  • 쓰기
#include <fstream>

ofstream outFile;

outFile.open("text.txt");

outFile << "안녕";

outFile.close();
  • 읽기
#include <fstream>

ifstream inFile;

inFile.open("text.txt");

if (!inFile.isopen) 
    exit(EXIT_FAILURE);
	
if (inFile.good()) 
    inFile >> str;

inFile.close();

  • open() 을 하면 새 파일을 만든다. 기존 파일이 존재하면 내용이 모두 지운다.

  • inFile.eof() 는 파일의 끝에 도달하면 true inFile.fail() 은 데이터형 불일치나 파일의 끝에 도달하면 true inFile.bad() 는 파일이 깨지거나 하드웨어 실패하면 true inFile.good() 은 잘못된 것이 하나도 없으면 true