Các hàm istream trong C ++

Cac Ham Istream Trong C

Thuật ngữ 'stream' trong C ++ mô tả luồng ký tự giữa luồng chương trình và i / o. Các lớp dòng C ++ là cần thiết để nhập và xuất các hành động trên các thiết bị và tệp IO. Các lớp này được thiết kế để quản lý đầu vào và đầu ra của chương trình và chúng có chức năng cụ thể.

Phân cấp lớp truyền trực tuyến

Một lớp C ++ được tạo thành từ các phương thức cần thiết để quản lý và chi phối dữ liệu mà nó chứa.

float, doubles và các lớp là các kiểu dữ liệu tương tự như int. Một biến duy nhất với một lớp làm kiểu dữ liệu của nó được gọi là một đối tượng C ++. Các đối tượng đặc biệt được chỉ định trước ‘cin’ và ‘cout’ có các lớp khác nhau làm kiểu dữ liệu của chúng.







Dữ liệu được ghi vào ‘cout’ hoặc đọc từ ‘cin’ là các ví dụ về luồng dữ liệu vào hoặc ra khỏi chương trình trong C ++. Hiện tại, chúng tôi đang xem xét bốn lớp sau cho lớp này:



Phát trực tuyến nó
Bất kỳ mục đích nào có thể được phục vụ bởi luồng đầu vào này. Một minh họa của dòng istream là cin.



Ostream
Nó là một dòng đầu ra với một số công dụng. Ostreams có dạng cout và cin.





Nếu luồng
Nó là một dòng các tập tin đầu vào.

Của luồng
Nó là một dòng các tệp đầu ra. Kế thừa là một khái niệm được sử dụng nhiều trong lập trình hướng đối tượng, chẳng hạn như trong C ++, trong đó một số lớp mang các đặc điểm của các lớp khác đã được tạo ra. Các lớp tổ tiên sau đó trở thành chuyên môn hóa của chính chúng thông qua việc đưa vào các tính năng mới.



Nếu luồng lớp
Một ifstream có thể được xử lý theo cách tương tự như istream, đó là những gì nó là.

Thuộc lớp luồng
Theo cùng một cách mà ifstreams hoạt động, nhưng với đầu ra thay vì đầu vào, ofstream là một luồng tệp đầu ra. Một ofstream được sử dụng giống như cout sau khi được xây dựng, mở và xác minh là không có lỗi.

Lớp Ios
Từ lớp này, tất cả các lớp luồng giảm dần. Luồng đầu vào và đầu ra là hai loại khác nhau.

Nó xác định các phần luồng độc lập với trạng thái đầu vào hoặc đầu ra của luồng trong cơ sở ios.

Trái ngược với các thành viên được thảo luận trong cơ sở ios, các thành viên phụ thuộc vào các tham số mẫu được mô tả trong phần này.

Luồng (đầu vào)
Do sự phức tạp của thư viện iostream, chúng tôi sẽ không thể trình bày toàn bộ trong các bài học này. Tuy nhiên, chúng tôi sẽ nêu bật các chức năng được sử dụng nhiều nhất. Trong phần này, chúng ta sẽ xem xét lớp đầu vào từ nhiều góc độ khác nhau (istream).

Chúng tôi đã biết rằng toán tử trích xuất (>>) sẽ được sử dụng để thu thập dữ liệu từ luồng đầu vào.

DÒNG

Trong ngôn ngữ lập trình C ++, luồng đầu vào được xử lý bởi lớp istream. Đầu vào được đọc và hiểu là một chuỗi ký tự sử dụng các đối tượng dòng đầu vào này. Đầu vào được xử lý bởi cin.

Các lớp thành viên

istream :: sentry
Một lớp thực hiện nhiều nhiệm vụ và mỗi lần thực hiện một thủ tục đầu vào. Trình hủy của nó không bắt buộc phải thực hiện bất kỳ hành động nào. Tuy nhiên, việc triển khai có thể thực hiện các tác vụ khởi động hoặc dọn dẹp bổ sung trên luồng được chia sẻ bởi tất cả các hoạt động đầu vào bằng cách sử dụng việc tạo và phá hủy các đối tượng giám sát.

Chức năng

istream :: gcount
Cung cấp số lượng ký tự thu được từ hành động đầu vào chưa được định dạng gần đây nhất của đối tượng. Các thủ tục đầu vào chưa được định dạng— get, getline, ignore, peek, read, read some, putback, and unget— thay đổi giá trị được trả về bởi hàm này. Tuy nhiên, hãy nhớ rằng việc gọi peek, putback hoặc unget không trích xuất bất kỳ ký tự nào. Kết quả là, số đếm sẽ luôn trả về 0.

istream :: get
Ký tự đơn loại bỏ một ký tự ra khỏi luồng. Ký tự được đặt làm giá trị của đối số hoặc được trả về (chữ ký đầu tiên) (chữ ký thứ hai).

Chuỗi C: Nếu ký tự phân tách có mặt, nó không bị xóa khỏi chuỗi đầu vào thay vào đó được giữ làm ký tự sau được truy xuất từ ​​luồng nếu nó có mặt.

istream :: getline
Xóa các ký tự khỏi luồng dưới dạng đầu vào chưa được định dạng và lưu chúng dưới dạng chuỗi c trong biến “s” cho đến khi ký tự được trích xuất trở thành ký tự phân tách hoặc các ký tự “n” đã được ghi thành ‘s’. Ngoài ra, phương thức sẽ ngừng giải nén các ký tự nếu nó đến cuối tệp.

Bên trong, hàm tạo một đối tượng trước khi truy cập vào chuỗi đầu vào. Cuối cùng, nó giết đối tượng trước khi quay trở lại, trích xuất các ký tự từ đối tượng bộ đệm luồng liên kết của nó (giả sử mọi thứ đều theo thứ tự) như thể đang thực thi một trong các phương thức thành viên của nó, sbumpc hoặc sgetc.

istream :: bỏ qua
Các ký tự được lấy từ chuỗi đầu vào và loại bỏ từng ký tự cho đến khi một trong hai ký tự “n” được lấy ra hoặc một ký tự được so sánh bằng dấu phân cách. Ngoài ra, nếu đến cuối tệp, hàm sẽ tạm dừng trích xuất ký tự. Hàm đặt cờ “eofbit” nếu nó đạt đến điểm này quá sớm (trước khi giải nén n ký tự hoặc phát hiện ra dấu phân cách).

Trước khi truy cập chuỗi đầu vào, hàm sẽ xây dựng một đối tượng sentry bên trong (với noskipws sẽ là true). Cuối cùng, nó giết đối tượng sentry trước khi quay trở lại, trích xuất các ký tự từ đối tượng bộ đệm luồng liên kết của nó (giả sử mọi thứ đều theo thứ tự) như thể đang thực thi một trong các phương thức thành viên của nó: sbumpc hoặc sgetc.

istream :: operator >>
Toán tử trích xuất (>>) áp dụng toán tử này cho một luồng đầu vào. Nó có quá nhiều thành viên như một chức năng.

Loại số học

Các ký tự được đưa ra khỏi luồng và được phân tích cú pháp tuần tự để đại diện cho một giá trị thuộc loại phù hợp, sau đó được lưu dưới dạng giá trị của “val”. Trước khi truy cập vào chuỗi đầu vào, hàm sẽ xây dựng một đối tượng sentry bên trong (noskipws sẽ là false). Nếu mọi thứ kiểm tra tốt, nó sẽ chạy num get :: get để hoàn tất quá trình trích xuất và phân tích cú pháp trong khi sửa đổi các cờ trạng thái bên trong của luồng. Đối tượng lính canh cuối cùng bị phá hủy trước khi nó rời đi.

Hàm tạo bên trong một đối tượng sentry trước khi đọc chuỗi đầu vào, nó được xem như là thực hiện đầu vào được định dạng. Cuối cùng, nó giết đối tượng sentry trước khi quay trở lại, trích xuất các ký tự từ đối tượng bộ đệm luồng liên kết của nó (giả sử mọi thứ đều theo thứ tự) như thể đang thực thi một trong các phương thức thành viên của nó, sbumpc hoặc sgetc.

Người thao túng

Pf (* this) được gọi, trong đó pf có thể là một trình điều khiển. Manipulators là các thường trình được tạo đặc biệt để được gọi khi toán tử này được gọi. Chuỗi đầu vào không bị ảnh hưởng bởi quy trình này và không có ký tự nào được trích xuất.

istream :: putback
Ký tự được khôi phục cố gắng di chuyển con trỏ xuống một ký tự trong luồng để ký tự cuối cùng được truy xuất từ ​​luồng một lần nữa có thể được trích xuất bằng các thao tác nhập.

Trước khi truy cập vào chuỗi đầu vào, hàm sẽ xây dựng một đối tượng sentry bên trong. Sau đó, nó gọi sputbackc (c) trên đối tượng bộ đệm luồng liên kết của nó (nếu tốt). Đối tượng lính canh cuối cùng bị phá hủy trước khi nó rời đi.

istream :: đọc
Đọc khối dữ liệu:

Các ký tự ‘n’ được lấy từ luồng và sau đó được lưu trữ trong mảng được trỏ tới bởi “s”. Hàm này chỉ sao chép một khối dữ liệu mà không cần kiểm tra nội dung của dữ liệu hoặc thêm ký tự null vào cuối.

Trong hàm, một đối tượng sentry đầu tiên được tạo trước khi chuỗi đầu vào được truy cập. Cuối cùng, nó giết đối tượng sentry trước khi quay trở lại, trích xuất các ký tự từ đối tượng bộ đệm luồng liên kết của nó (giả sử mọi thứ đều theo thứ tự) như thể đang thực thi một trong các phương thức thành viên của nó: sbumpc hoặc sgetc.

Gọi thành viên đếm sẽ trả về tổng số ký tự mà hàm này đã đọc và lưu trữ đúng cách.

istream :: readsome
Chức năng này phụ thuộc vào hoạt động bên trong của đối tượng bộ đệm luồng cụ thể được liên kết với luồng, mà hành vi của chúng phần lớn được xác định thực thi cho các lớp tiêu chuẩn.

Trong hàm, một đối tượng sentry đầu tiên được tạo trước khi chuỗi đầu vào được truy cập. Sau đó (nếu thành công), nó gọi hàm thành viên trong lịch phát sóng của đối tượng bộ đệm luồng để xác định số lượng ký tự hiện có sẵn trước khi gọi “sbumpc” để trích xuất tối đa số ký tự đó (hoặc sgetc). Đối tượng lính canh cuối cùng bị phá hủy trước khi nó rời đi.

istream :: seekg
Vị trí trong dòng đầu vào xác định nơi ký tự sau sẽ được kéo từ dòng đầu vào. Trước khi đọc chuỗi đầu vào, hàm này xây dựng bên trong một đối tượng sentry. Sau đó (nếu OK), nó thực hiện một trong hai lệnh gọi đến đối tượng bộ đệm luồng tương ứng: pubseekpos (1) hoặc pubseekoff (2), (Nếu có). Cuối cùng, nó tiêu diệt vật phẩm lính gác và khởi hành.

istream :: sync
Căn chỉnh bộ đệm đầu vào:

Đưa chuỗi đầu vào được kiểm soát của bộ đệm luồng được liên kết vào đồng bộ hóa. Việc triển khai cụ thể của đối tượng bộ đệm luồng được kết nối với luồng sẽ xác định các chi tiết cụ thể của hoạt động.

istream :: tellg
Có được vị trí của trình tự đầu vào:

Nó cung cấp vị trí của nhân vật hiện tại trong luồng đầu vào. Sau đó, hàm trả về -1. Nếu thành viên không thành công, nó sẽ trả về true.

Nó trả về rdbuf () -> pubseekoff nếu không (0, cur, in). Đối tượng lính canh cuối cùng bị phá hủy trước khi nó rời đi.

istream :: unget
Xóa ký tự:

Cố gắng di chuyển con trỏ xuống một ký tự trong luồng để ký tự cuối cùng được truy xuất từ ​​luồng một lần nữa có thể được trích xuất bằng các thao tác nhập.

Không phải thành viên

toán tử >> (istream)
Toán tử trích xuất (>>) cung cấp đầu vào được định dạng với hành động này khi được áp dụng cho một luồng đầu vào.

Một ký tự: Chuỗi ký tự lấy ký tự tiếp theo ra khỏi nó và lưu trữ nó dưới dạng giá trị của “c”. Quá trình trích xuất các ký tự từ là và lưu trữ chúng trong s, dưới dạng chuỗi c, dừng (nếu độ rộng không phải bằng 0) khi gặp ký tự khoảng trắng hoặc (độ rộng () -1) ký tự đã được trích xuất.

Trích xuất rvalue: cho phép trích xuất từ ​​các đối tượng dòng giá trị rvalue, có kết quả giống như trích xuất từ ​​các giá trị: Nó gọi là >> Val.

ví dụ 1

Trong trường hợp này, chúng tôi sẽ kiểm tra cách chúng tôi có thể nhận được bất kỳ giá trị nào từ người dùng và sau đó hiển thị nó dưới dạng kết quả trên màn hình.

#include
sử dụng không gian tên std ;
int chính ( )
{
int Không ;
cout << 'Vui lòng nhập một số' ;
Ăn >> Không ;
cout << 'Giá trị đã nhập là:' << Không << ' \N ' ;
}

Chúng tôi sẽ bao gồm tệp tiêu đề . Tiếp theo, chúng tôi sẽ sử dụng không gian tên ‘std’ trong không gian tên chuẩn. Chúng tôi sẽ gọi hàm main (). Một biến có tên “không” sẽ được khai báo trong phương thức này. Kiểu dữ liệu 'int' được đại diện cho biến này. Thuật ngữ 'int' là chữ viết tắt của một số nguyên. Sau đó, câu lệnh ‘cout’ được sử dụng. Lệnh này in ra dòng.

Người dùng sẽ nhập bất kỳ giá trị ngẫu nhiên nào sau khi văn bản này được hiển thị trên màn hình. Sau đó, câu lệnh 'cin' sẽ được sử dụng. Lệnh này yêu cầu người dùng chỉ ra giá trị. Số đã nhập của người dùng sẽ được lưu trong một biến. Giá trị do người dùng cung cấp sẽ được hiển thị trên màn hình bằng lệnh 'cout'.

Ví dụ 2

Trong trường hợp này, chúng ta sẽ thấy cách chúng ta lấy bất kỳ tên nào từ người dùng và sau đó hiển thị tên đó trên màn hình dưới dạng kết quả.

#include
sử dụng không gian tên std ;

int chính ( )

{

char Tên [ 125 ] ;
cout << 'Điền tên của bạn' << endl ;


Ăn >> ws ;

Ăn . theo hàng ( Tên, 125 ) ;

cout << Tên << endl ;

trở về 0 ;

}

Chúng tôi sẽ kết hợp tệp tiêu đề . Tiếp theo, chúng tôi sẽ sử dụng không gian tên tiêu chuẩn là ‘std’. Chúng tôi sẽ gọi hàm main (). Trong phương thức này, chúng ta sẽ khai báo một biến. Biến này giữ kiểu dữ liệu ‘char’. Sau đó, câu lệnh 'cout' được sử dụng. Lệnh này hiển thị dòng chữ ‘Nhập tên của bạn’ trên màn hình. Sau khi hiển thị văn bản này trên màn hình, người dùng sẽ nhập bất kỳ tên nào. Sau đó, chúng tôi sẽ sử dụng câu lệnh ‘cin’.

Lệnh này nhận giá trị từ người dùng. Tên đã cung cấp sẽ được lưu trữ trong một biến 'ws'. Ở đây, một lần nữa, chúng ta sẽ sử dụng lệnh ‘cin’. Trong lệnh này, hàm getline () đang được áp dụng. Hàm này chứa tham số bao gồm tên do người dùng nhập và độ dài của tên. Lệnh ‘cout’ sẽ được sử dụng để hiển thị tên do người dùng cung cấp. Để kết thúc mã, lệnh ‘return 0’ sẽ được sử dụng.

Sự kết luận

Đầu tiên, chúng ta đã nói về các hàm istream trong C ++ là gì. Sau đó, chúng tôi quan sát một số chức năng và định nghĩa quan trọng được đề cập. Trong bài viết này, chúng tôi đã chạy các mã khác nhau chứa nhiều hàm istream. Trong mã đầu tiên, chúng tôi lấy bất kỳ số nào từ người dùng và hiển thị số đó trên màn hình. Trong lần thứ hai, người dùng nhập tên và in tên đó trên màn hình.