5장 반복문과 cin 메모

2023. 7. 1. 18:36·C++/C++

●a = b = c = 0; 이 가능하다. (단 우선순위를 신경써야 한다.)

 

◆부수 효과와 시퀀스 포인트

  • 부수 효과(side effect)는, 수식을 평가할 때 변수에 저장되어 있는 값과 같은 것이 변경될 때 일어나는 효과이다. (++)
  • 시퀸스 포인트는 프로그램의 실행이 다음 단계로 넘어가기 전에 모든 부수 효과들이 확실하게 평가되는 포인트이다. (;)
  • 완전 수식은 더 커다란 수식의 부분 수식이 아닌 수식을 말한다. 수식 구문의 수식 부분과 while 루프의 검사 조건으로 사용된 수식은 완전 수식의 예에 포함된다.
  • 접미,접두어 연산자는 시퀸스 포인트에서의 작동은 보장하지만, 부수 효과시점에서의 작동은 보장하지 않는다.
int main(){
    int x=0;
    int y=(4 + x++) + ( 6 + x++);   //프로그램에 따라 10일 수도 11일 수도 있다.
    cout<<y<<" "<<x;
    //결과 : 11 2
}
  • 따라서, 운영체제나 컴파일러의 차이에 따라 다른 값이 나올 수 있으니 위와 같은 식은 지향하도록하자.

 

◆포인터의 접두형 연산자

    //++가 *보다 우선순위가 높은것에 주의하자!
    int * arr = new int [5] {0,10,20,30,40};    //동적으로 배열 선언
    cout<<*++arr    <<endl;     //10 , 포인터 증가 , arr[1]
    cout<<++*arr    <<endl;     //11 , 포인터의 값 증가, arr[1]의 10+1
    cout<<(*arr)++  <<endl;     //11 , 포인터의 값 증가, 후위 연산 이라 다음줄에 11+1
    cout<<*arr++    <<endl;     //12 , 포인터 증가, 후위 연산 다음 연산에 영향 20
    cout<<*arr      <<endl;     //20 , arr[2]
    delete arr;
  • 포인터의 덧셈 연산과 우선순위를 신경써서 계산해야 한다.
  • 콤마연산자를 통해 for문에서 표현식을 여러 개 쓸 수 있다. (순서는 오른쪽 부터 실행한다.)
for(int i=0,a=10;i<a;i++,a-=i)

 

  • 크기가 다른 배열에 저장되어 있더라도 컴파일러는 두 문자열이 동일하다고 할 수 있다.

 

◆C++의 데이터형의 대응 이름

●#define BYTE char  

  • 전처리기가 BYTE를 char로 대체한다.

●typedef char byte;

  • byte를 char의 대용 이름으로 만든다.

 

※ 포인터 선언의 경우 전처리기를 사용하면 원하는 결과가 안 나올 수 가 있다.

int * pA, pB;	// pA는 int_pointer로 pB는 int형으로 정의된다.
  • 따라서 typedef를 사용하자.

 

◆Range 기반의 for 루프

	//1번
	int prices[5] {0,1,2,3,4};
    for (int x : prices)
        cout << x << " ";		//출력 0 1 2 3 4
        
    //2번
    for (int x :{0,1,2,3,4})
    	cout << x << " ";		//출력 0 1 2 3 4

 

◆EOF

●Ctrl+D나 Ctrl+Z를 통해서 EOF를 입력할 수 있다. 

●cin은 EOF를 탐지했을 때 두개의 비트(eofbit와 failbit)를 1로 설정한다.

●cin.eof() 나 cin.fail()을 사용하면 가장 최근에 읽은 결과(EOF라면 true, 1)를 보고한다. //fail()을 추천한다.

●EOF가 입력되면 cin객체에서 EOF 조건을 나타내는 플래그가 설정되어 더 이상의 입력을 받아 들이지 않는데, 이를 해결하기 위해  cin.clear()을 사용해 줄 수 있다.

 

◆EOF와 자료형

  • EOF는 대개 -1로 나타내는데, char 형은 부호가 없을 수 있기 떄문에 사용시 int로 형변환이 필요할 수 있다.
    while((int)cin.get()==EOF){
        cout<<"EOF를 입력하셨습니다!"<<endl;
        break;
    }

 

◆cin.get(ch)와 ch = cin.get() 의 차이점

특성 cin.get(ch) ch = cin.get()
입력 문자 전달 방법 매개변수 ch에 대입 함수의 리턴값을 ch에 대입
문자가 입력되었을 때의 함수 리턴 값 istream 클래스의 객체 
(bool 값으로 변환  후 true)
int형으로 된 문자 코드
EOF에서의 함수 리턴 값 istream 클래스의 객체
(bool 값으로 변환 후 false)
EOF
  • cin.get(ch)는 리턴 값이 istream 객체이기 때문에 객체 지향적이다.
  • cin.get(ch1).get(ch2); 는 ch1을 받아들이고 ch2를 받아들인다.
  • 이것은 cin.get(ch1)이 cin 객체를 리턴하기 때문이다. 이후 cin.get(ch2)로 다시 사용한다.

 

●cin은 빈칸 문자, 개행 문자들을 전부 무시하고 건너뛴다.

 

 

◆조건문 응용

    //입력이 성공시 루프 실행
    int x;
    cin>>x;
    while(cin.fail()==0){
        cout<<"Not fail 1"<<endl;
        break;
    }
    while(!cin.fail()){
        cout<<"Not fail 2"<<endl;
        break;
    }   
    while(cin){
        cout<<"Not fail 3"<<endl;
        break;
    }

    //입력을 조건문에서 실행
    cin.get();
    cin.clear();
    char ch; 
    while(cin.get(ch)){
        cout<<"Not fail 4";
        break;
    }

실행 결과

 

'C++ > C++' 카테고리의 다른 글

7. 함수 - C++의 프로그래밍 모듈  (0) 2023.07.10
6장 조건문  (0) 2023.07.02
4장 포인터, 배열, 포인터 연산 메모  (0) 2023.06.26
[C++] 람다 함수  (0) 2023.02.17
[C++] 파일 입출력  (0) 2023.02.16
'C++/C++' 카테고리의 다른 글
  • 7. 함수 - C++의 프로그래밍 모듈
  • 6장 조건문
  • 4장 포인터, 배열, 포인터 연산 메모
  • [C++] 람다 함수
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 코딩테스트(C++)
      • TIL(Today I Learn)
        • TIL
      • 강의
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • CS
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 기타
        • Python
        • 알고리즘
        • 프로젝트 회고
      • 일상
        • 주식
        • 독서
        • 일기
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
        • 책
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

    ~
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
5장 반복문과 cin 메모
상단으로

티스토리툴바