c+cin 을 while 조건 으로(상세 설명)

4166 단어 cwhilecin
본 논문 의 모든 테스트 는 windows clion 에서 진행 된다.
clion 에서 ctrl+z 는 파일 끝 문자 가 아 닙 니 다.
cmd 에서 운행 하려 면 ctrl+z 를 다시 차 에 싣 기만 하면 정확 한 결 과 를 얻 을 수 있다
1、cin
cin 은 C++프로 그래 밍 언어의 표준 입력 흐름 대상,즉 istream 클래스 의 대상 입 니 다.cin 은 주로 표준 입력 에서 데 이 터 를 읽 는 데 사 용 됩 니 다.이 표준 입력 은 터미널 의 키 보드 를 말 합 니 다.그 밖 에 cout 는 흐름 의 대상,즉 ostream 류 의 대상 이 고 cerr 는 표준 오류 출력 흐름 의 대상 이자 ostream 류 의 대상 이다.이곳 의 표준 출력 은 터미널 키 보드 를 가리 키 며,표준 오류 출력 은 터미널 화면 을 가리킨다.
cin 기능 을 이해 할 때 표준 입력 버퍼 를 제시 해 야 합 니 다.키보드 에서 문자열 을 입력 할 때 Enter 키 를 두 드 려 야 이 문자열 을 버퍼 에 보 낼 수 있 습 니 다.그러면 두 드 린 이 Enter 키(\r)는 줄 바 꿈 문자 로 변 환 됩 니 다.이 줄 바 꿈 문자 도 cin 버퍼 에 저장 되 고 문자 로 계 산 됩 니 다!예 를 들 어 우 리 는 키보드 에서 123456 이라는 문자열 을 두 드 린 다음 Enter 키(\r)를 두 드 려 서 이 문자열 을 버퍼 에 보 냈 다.그러면 이때 버퍼 의 바이트 개 수 는 6 이 아니 라 7 이다.
cin 읽 기 데이터 도 버퍼 에서 데 이 터 를 가 져 옵 니 다.버퍼 가 비어 있 을 때 cin 의 구성원 함수 가 데 이 터 를 기다 리 는 것 을 막 습 니 다.버퍼 에 데이터 가 있 으 면 cin 의 구성원 함수 로 데 이 터 를 읽 습 니 다.cin>>버퍼 에서 데 이 터 를 읽 을 때 버퍼 의 첫 번 째 문자 가 빈 칸,tab 또는 줄 을 바 꿀 때 cin>>는 무시 하고 제거 합 니 다.다음 문 자 를 계속 읽 습 니 다.버퍼 가 비어 있 으 면 계속 기다 리 십시오.그러나 읽 기 에 성공 하면 문자 뒤의 구분자 가 버퍼 에 남아 있 습 니 다.cin>>처리 하지 않 습 니 다.
istream 의 대상 을 조건 으로 사용 할 때 효 과 는 흐름 을 검사 하 는 상태 입 니 다.흐름 이 유효 하면 검 측 에 성공 하여 true 로 돌아 갑 니 다.파일 끝 문자 나 잘못된 입력 을 만 났 을 때(예 를 들 어 하나의 문자 로 전체 형식의 입력 을 할 때)istream 의 대상 상 태 는 무효 가 됩 니 다.
요컨대
(1)  데 이 터 를 입력 할 때 리 턴 키 를 눌 러 야 데 이 터 를 버퍼 에 보 낼 수 있 고,cin 은 캐 시 구역 의 데 이 터 를 읽 을 수 있 습 니 다.
(2)cin 이 파일 끝 자 를 만 났 을 때(windows 에 서 는 ctrl+Z,Unix 에 서 는 ctrl+D)또는 입력 이 잘못 되 어야 cin 상 태 를 무효 로 할 수 있 습 니 다.
이 테스트 코드 는 상기 문 제 를 설명 할 것 이다.
코드 역할:입력 값 에서 데이터 가 연속 으로 나타 나 는 횟수 를 통계 합 니 다.
입력 데이터 의 개 수 를 판단 할 수 없 기 때문에 순환 횟수 를 하나의 값 으로 제어 할 수 없습니다.여기 서 우 리 는 cin 을 if 조건 으로 사용 합 니 다.

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {

  cout << "Enter a list of integers:" << std::endl;
  int currVal = 0;
  int val = 0;
  int cnt = 0;

  /*          */
  if ( cin >> currVal ){
    cnt = 1;
    /*         */
    while( cin >> val ){
      /*         val      currVal  ,cnt++*/
      if (currVal == val) {
        ++cnt;
      } else {
        /*     ,      currVal       ,                 */
        cout << currVal << " occurs " << cnt << " times. " << endl;
        currVal = val;
        cnt = 1;
      }
    }
     /*               */
    cout << currVal << " occurs " << cnt << " times. " << endl;
  }
  return 0;
}
(1)콘 솔 입력 1 2 3 4 5 6 7 Enter:

7 의 통 계 는 표시 되 지 않 았 습 니 다.이 럴 때 저 희 는 데 이 터 를 버퍼 에 push 했 을 뿐 while 의 cin 은 7 까지 읽 었 습 니 다.스 트림 의 검 측 상 태 는 true 이기 때문에 순환 을 종료 하지 않 고 다음 입력 데 이 터 를 기다 리 고 있 습 니 다.while 순환 이외 의 코드 를 실행 할 수 없습니다.이 때문에 마지막 다음 데 이 터 를 인쇄 할 수 없습니다.7.
(2)콘 솔 입력 1 2 3 4 5 6 7+ctrl+D:

 ctrl+d 로 데 이 터 를 직접 끝 냅 니 다.데 이 터 는 1 부터 7 까지 버퍼 에 제출 되 지 않 았 습 니 다.if 의 cin 은 파일 끝 자 를 직접 읽 었 습 니 다.흐름 상 태 는 false 로 감지 되 었 습 니 다.if 의 코드 는 실행 할 수 없 으 며 프로그램 실행 을 직접 끝 냅 니 다.
(3)콘 솔 에 1,2,3,4,5,6,7 을 입력 하 세 요.
ctrl+D 를 입력 하 십시오:

1 에서 6 까지 의 출력 은(2)에서 말 한 바 와 같이 우리 가 파일 종료 기 호 를 다시 입력 할 때 cin 흐름 상 태 는 false 이 고 while 순환 을 끝 냅 니 다.따라서 while 순환 이외 의 코드 를 실행 하여 마지막 데이터 7 의 통계 횟수 를 출력 합 니 다.
(4)콘 솔 입력 1,2,3,4,5,6,7 t 리 턴:

우 리 는 1 에서 7,t 를 입력 한 후에 enter 를 입력 하여 데 이 터 를 버퍼 에 push 합 니 다.while 순환 조건 에서 cin 은 val 에 하나씩 읽 고 순환 체 의 코드 를 실행 합 니 다.마지막 으로 t 를 읽 을 때 int 형의 변수 에 문 자 를 저장 하려 고 합 니 다.잘못된 입력 으로 인해 흐름 상 태 를 false 로 만 들 고 while 순환 을 재배 하면 마지막 데이터 의 통계 정 보 를 출력 할 수 있 습 니 다.
이상 의 c+cin 은 while 조건(상세 설명)으로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 여러분 들 이 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기