C++ 아이스트림 함수

C Aiseuteulim Hamsu

C++에서 '스트림'이라는 용어는 프로그램 스레드와 i/o 사이의 문자 흐름을 설명합니다. C++ 스트림 클래스는 IO 장치 및 파일에 대한 작업을 입력 및 출력하는 데 필요합니다. 이 클래스는 프로그램의 입력 및 출력을 관리하도록 설계되었으며 특정 기능을 가지고 있습니다.

스트림 클래스 계층

C++ 클래스는 포함된 데이터를 관리하고 통제하는 데 필요한 메서드로 구성됩니다.

float, double 및 클래스는 int와 유사한 데이터 유형입니다. 데이터 유형으로 클래스가 있는 고유 변수를 C++ 개체라고 합니다. 미리 지정된 특수 객체 'cin'과 'cout'는 데이터 유형으로 다양한 클래스를 가집니다.



'cout'에 쓰거나 'cin'에서 읽은 데이터는 C++에서 프로그램 안팎으로 흐르는 데이터의 예입니다. 현재 이 클래스에 대해 다음 네 가지 클래스를 고려하고 있습니다.



스트리밍
이 입력 스트림은 어떤 용도로든 사용할 수 있습니다. istream의 그림은 cin입니다.



오스트림
여러 용도로 사용되는 출력 스트림입니다. Ostreams는 cout 및 cin의 형태로 제공됩니다.

스트리밍하는 경우
입력 파일의 스트림입니다.

스트림의
출력 파일의 스트림입니다. 상속은 일부 클래스가 이미 생성된 다른 클래스의 특성을 취하는 C++와 같은 객체 지향 프로그래밍에서 많이 사용되는 개념입니다. 그런 다음 조상 클래스는 새로운 기능을 포함하여 자체적으로 전문화됩니다.



스트림 클래스인 경우
ifstream은 istream과 같은 방식으로 처리될 수 있습니다.

스트림 클래스의
ifstreams가 작동하는 것과 같은 방식이지만 입력 대신 출력을 사용하는 경우 ofstream은 출력 파일 스트림입니다. ofstream은 구성, 개방 및 오류가 없는지 확인한 후 cout과 동일한 방식으로 사용됩니다.

이오스 클래스
이 클래스에서 모든 스트림 클래스가 파생되었습니다. 입력 및 출력 스트림은 서로 다른 두 가지 유형입니다.

ios 기반에서 스트림의 입력 또는 출력 상태와 독립적인 스트림 부분을 정의합니다.

ios 기반에서 논의되는 멤버와 달리 템플릿 매개변수에 의존하는 멤버는 이 부분에서 설명합니다.

스트림(입력)
iostream 라이브러리의 복잡성으로 인해 이 강의에서 완전히 다룰 수는 없습니다. 그러나 가장 많이 사용되는 기능을 강조 표시합니다. 이 섹션에서는 다양한 각도(istream)에서 입력 클래스를 살펴보겠습니다.

추출 연산자(>>)를 사용하여 입력 스트림에서 데이터를 얻을 수 있다는 것을 배웠습니다.

개울

C++ 프로그래밍 언어에서 입력 스트림은 istream 클래스에 의해 처리됩니다. 입력은 이러한 입력 스트림 개체를 사용하여 일련의 문자로 읽고 이해됩니다. 입력은 cin에 의해 처리됩니다.

회원 클래스

아이스트림::센트리
입력 절차를 수행할 때마다 많은 작업을 수행하는 클래스입니다. 소멸자는 작업을 수행할 필요가 없습니다. 그러나 구현은 보초 개체의 생성 및 소멸을 사용하여 모든 입력 작업에서 공유하는 스트림에서 추가 시작 또는 정리 작업을 실행할 수 있습니다.

기능

아이스트림::gcount
개체의 가장 최근의 형식화되지 않은 입력 작업에서 얻은 문자 수를 제공합니다. 형식화되지 않은 입력 프로시저(get, getline, ignore, peek, read, read some, putback 및 unget)는 이 함수가 반환하는 값을 변경합니다. 그러나 peeks, putback 또는 unget을 호출해도 문자가 추출되지 않습니다. 결과적으로 카운트는 항상 0을 반환합니다.

아이스트림::겟
단일 문자는 스트림에서 한 문자를 가져옵니다. 문자는 인수의 값으로 설정되거나 반환(첫 번째 서명)(두 번째 서명)됩니다.

C 문자열: 구분 문자가 있으면 입력 시퀀스에서 제거되지 않고 대신 스트림에서 검색할 다음 문자로 유지됩니다(있는 경우).

istream::getline
스트림에서 형식이 지정되지 않은 입력으로 문자를 제거하고 추출된 문자가 구분 문자가 되거나 'n' 문자가 's'에 기록될 때까지 변수 's'에 c-string으로 저장합니다. 또한 메서드는 파일 끝에 도달하면 문자 추출을 중지합니다.

내부적으로 함수는 입력 시퀀스에 액세스하기 전에 개체를 만듭니다. 마지막으로, 반환하기 전에 객체를 죽이고, 연결된 스트림 버퍼 객체(모든 것이 순서대로라고 가정)에서 문자를 추출합니다.

istream::무시
문자는 입력 시퀀스에서 가져오고 'n'개의 문자가 제거되거나 하나가 구분 기호와 같을 때까지 한 번에 하나씩 버립니다. 또한 파일 끝에 도달하면 함수가 문자 추출을 중지합니다. 이 함수는 너무 빨리 이 지점에 도달하면 'eofbit' 플래그를 설정합니다(n 문자를 추출하거나 구분 기호를 발견하기 전에).

입력 시퀀스에 액세스하기 전에 함수는 내부적으로 센트리 객체를 구성합니다(noskipws가 true가 됨). 마지막으로 sbumpc 또는 sgetc라는 멤버 메서드 중 하나를 실행하는 것처럼 연결된 스트림 버퍼 객체(모든 것이 순서대로라고 가정)에서 문자를 추출하여 반환하기 전에 센트리 객체를 종료합니다.

istream::연산자>>
추출 연산자(>>)는 이 연산자를 입력 스트림에 적용합니다. 함수로 너무 많은 구성원이 있습니다.

산술 유형

스트림에서 문자를 가져오고 올바른 유형의 값을 나타내기 위해 순차적으로 구문 분석한 다음 'val' 값으로 저장합니다. 입력 시퀀스에 액세스하기 전에 함수는 내부적으로 센트리 객체를 구성합니다(noskipws는 false가 됨). 모든 것이 잘 확인되면 스트림의 내부 상태 플래그를 수정하는 동안 추출 및 구문 분석 프로세스를 완료하기 위해 num get::get을 실행합니다. 보초 개체는 떠나기 전에 궁극적으로 파괴됩니다.

이 함수는 입력 시퀀스를 읽기 전에 내부적으로 센트리 객체를 생성하며 형식화된 입력을 수행하는 것으로 간주됩니다. 마지막으로 반환하기 전에 센트리 객체를 죽이고, 연결된 스트림 버퍼 객체에서 문자를 추출합니다(모든 것이 순서대로라고 가정). 마치 멤버 메서드인 sbumpc 또는 sgetc 중 하나를 실행하는 것처럼 보입니다.

조작자

pf(*this)가 호출되며 여기서 pf는 조작자가 될 수 있습니다. 조작자는 특히 이 연산자가 호출될 때 호출되도록 생성된 루틴입니다. 입력 시퀀스는 이 절차의 영향을 받지 않으며 문자가 추출되지 않습니다.

istream::푸트백
복원된 문자는 스트림에서 한 문자 아래로 커서를 이동하려고 시도하므로 스트림에서 검색된 마지막 문자가 입력 작업으로 다시 한 번 추출될 수 있습니다.

입력 시퀀스에 액세스하기 전에 함수는 내부적으로 보초 객체를 구성합니다. 그런 다음 연결된 스트림 버퍼 개체(좋은 경우)에서 sputbackc(c)를 호출합니다. 보초 개체는 떠나기 전에 궁극적으로 파괴됩니다.

아이스트림::읽기
데이터 블록 읽기:

'n' 문자는 스트림에서 가져온 다음 's'가 가리키는 배열에 저장됩니다. 이 함수는 데이터 내용을 검사하거나 끝에 null 문자를 추가하지 않고 데이터 블록을 복제할 뿐입니다.

함수 내에서 센트리 개체는 입력 시퀀스에 액세스하기 전에 먼저 생성됩니다. 마지막으로 sbumpc 또는 sgetc라는 멤버 메서드 중 하나를 실행하는 것처럼 연결된 스트림 버퍼 객체(모든 것이 순서대로라고 가정)에서 문자를 추출하여 반환하기 전에 센트리 객체를 종료합니다.

멤버 수를 호출하면 이 함수가 제대로 읽고 저장한 총 문자 수를 반환합니다.

istream::readsome
이 함수는 스트림에 연결된 특정 스트림 버퍼 개체의 내부 작동에 따라 달라지며, 그 동작은 주로 표준 클래스에 대해 구현 정의됩니다.

함수 내에서 센트리 개체는 입력 시퀀스에 액세스하기 전에 먼저 생성됩니다. 그런 다음 (성공한 경우) 스트림 버퍼 객체의 제공 목록에 있는 멤버 함수를 호출하여 'sbumpc'를 호출하여 해당 문자 수(또는 sgetc)까지 추출하기 전에 현재 사용 가능한 문자 수를 결정합니다. 보초 개체는 떠나기 전에 궁극적으로 파괴됩니다.

istream::seekg
입력 라인의 위치는 입력 스트림에서 다음 문자를 가져올 위치를 결정합니다. 입력 시퀀스를 읽기 전에 함수는 내부적으로 보초 객체를 생성합니다. 그런 다음(OK인 경우) 해당 스트림 버퍼 개체에 대한 두 가지 호출 중 하나를 수행합니다. pubseekpos(1) 또는 pubseekoff(2), (있는 경우). 마지막으로 센트리 아이템을 없애고 출발합니다.

아이스트림::동기화
입력 버퍼 정렬:

연결된 스트림 버퍼의 제어된 입력 시퀀스를 동기화합니다. 스트림에 연결된 스트림 버퍼 객체의 특정 구현은 작업의 세부 사항을 결정합니다.

아이스트림::텔그
입력 시퀀스의 위치를 ​​​​얻습니다.

입력 스트림에서 현재 문자의 위치를 ​​제공합니다. 그런 다음 함수는 -1을 반환합니다. 멤버가 실패하면 true를 반환합니다.

(0,cur,in)이 아니면 rdbuf()->pubseekoff를 반환합니다. 보초 개체는 떠나기 전에 궁극적으로 파괴됩니다.

istream::unget
문자 제거:

스트림에서 검색된 마지막 문자가 입력 작업으로 다시 한 번 추출될 수 있도록 커서를 스트림에서 한 문자 아래로 이동하려고 시도합니다.

비 멤버

연산자 >> (istream)
추출 연산자(>>)는 입력 스트림에 적용될 때 이 작업과 함께 형식이 지정된 입력을 제공합니다.

한 문자: 문자 시퀀스는 다음 문자를 가져와 'c' 값으로 저장합니다. is에서 문자를 추출하고 s에 c-문자열로 저장하는 프로세스는 공백 문자가 발생하거나 (width()-1) 문자가 추출되면 중지됩니다(폭이 0이 아닌 경우).

rvalue 추출: rvalue istream 객체에서 추출할 수 있으며, 이는 lvalue에서 추출하는 것과 동일한 결과를 가집니다. is>>Val을 호출합니다.

실시예 1

이 경우 사용자로부터 값을 얻은 다음 화면에 결과로 표시하는 방법을 조사합니다.

#include
사용 네임스페이스 표준 ;
정수 기본 ( )
{
정수 아니 ;
쫓다 << '번호를 입력하세요' ;
먹기 >> 아니 ;
쫓다 << '입력한 값은: ' << 아니 << ' \N ' ;
}

헤더 파일을 포함합니다. 다음으로 표준 네임스페이스에서 'std' 네임스페이스를 사용합니다. main() 함수를 호출합니다. 이 메소드 내에서 'no'라는 변수가 선언됩니다. 'int' 데이터 유형은 이 변수에 대해 표시됩니다. 'int'라는 용어는 정수의 약어입니다. 그 다음에는 'cout' 문을 사용합니다. 이 명령어는 줄을 인쇄합니다.

사용자는 이 텍스트가 화면에 표시된 후 임의의 값을 입력합니다. 그런 다음 'cin'문이 활용되었을 것입니다. 이 명령을 사용하려면 사용자가 값을 표시해야 합니다. 사용자가 입력한 번호는 변수에 저장됩니다. 사용자가 제공한 값은 'cout' 명령을 사용하여 화면에 표시됩니다.

실시예 2

이 경우 사용자로부터 이름을 얻은 다음 결과로 화면에 표시하는 방법을 볼 수 있습니다.

#include
사용 네임스페이스 표준 ;

정수 기본 ( )

{

이름 [ 125 ] ;
쫓다 << '당신의 이름을 입력' << ;


먹기 >> ;

먹기 . 도착 ( 이름, 125 ) ;

쫓다 << 이름 << ;

반품 0 ;

}

헤더 파일 을 통합합니다. 다음으로 표준 네임스페이스를 'std'로 활용합니다. 우리는 main() 함수를 호출할 것입니다. 이 메서드 내에서 변수를 선언합니다. 이 변수는 'char' 데이터 유형을 보유합니다. 그런 다음 'cout' 문을 사용합니다. 이 명령은 화면에 '이름을 입력하세요'라는 텍스트를 표시합니다. 이 텍스트를 화면에 표시한 후 사용자는 아무 이름이나 입력합니다. 그런 다음 'cin'문을 사용합니다.

이 명령은 사용자로부터 값을 가져옵니다. 제공된 이름은 변수 'ws'에 저장됩니다. 여기서 다시 한 번 'cin' 명령을 사용합니다. 이 명령 내에서 getline() 함수가 적용됩니다. 이 함수는 사용자가 입력한 이름과 이름의 길이를 포함하는 매개변수를 포함합니다. 'cout' 명령은 사용자가 제공한 이름을 표시하는 데 사용됩니다. 코드를 종료하려면 'return 0' 명령이 사용됩니다.

결론

먼저 C++ istream 함수가 무엇인지에 대해 이야기했습니다. 그런 다음 언급된 몇 가지 기능과 중요한 정의를 관찰합니다. 이 기사에서는 다양한 istream 기능을 포함하는 다양한 코드를 실행했습니다. 첫 번째 코드에서는 사용자로부터 임의의 숫자를 가져와서 해당 숫자를 화면에 표시합니다. 두 번째에서 사용자는 이름을 입력하고 화면에 그 이름을 인쇄했습니다.