Khi nào nên sử dụng std::cin.getline()
? Điều gì khác với std::cin
?std :: cin.getline() so với std :: cin
Trả lời
Trong trường hợp với char *, std::cin.getline
nhận dòng, thay vì std::cin
nhận từ đầu tiên.
Bạn đã đọc bất kỳ tài liệu nào (ví dụ: http://www.cplusplus.com/reference/string/getline/)?
Về cơ bản, std::cin
(hoặc thường là, bất kỳ std::istream
) nào được sử dụng trực tiếp để nhận được định dạng đầu vào, ví dụ: int x; std::cin >> x;
. std::cin.getline()
được sử dụng chỉ đơn giản là để điền vào một bộ đệm char *
thô.
đường dây thành viên không cho bạn một chuỗi 'std ::', nó được sử dụng để lấp đầy bộ đệm' char * '. Đường getline đưa bạn một 'std :: string' là hàm miễn phí' std :: getline'. – etarion
@Oli. Có, tôi đã thấy tài liệu cho một chút nhưng không hiểu ý tưởng đó. Bây giờ, tôi nghĩ nó rõ ràng hơn. Cảm ơn. – Simplicity
@etarion: Bắt tốt. Đang cập nhật câu trả lời ngay bây giờ ... –
Chúng ta hãy cách nhau std::cin.getline()
. Đầu tiên, có std::
. Đây là không gian tên trong đó thư viện chuẩn sống. Nó có hàng trăm loại, chức năng và đối tượng.
std::cin
là một đối tượng như vậy. Đó là đối tượng đầu vào ký tự chuẩn, được xác định trong <iostream>
. Nó có một số phương pháp riêng của nó, nhưng bạn cũng có thể sử dụng nó với nhiều chức năng miễn phí. Hầu hết các phương thức và hàm này là cách để lấy một hoặc nhiều ký tự từ đầu vào tiêu chuẩn.
Cuối cùng, .getline()
là một phương pháp như vậy là std::cin
(và các đối tượng tương tự khác). Bạn cho biết có bao nhiêu ký tự nó sẽ nhận được từ đối tượng ở bên trái của nó (std::cin
ở đây), và vị trí để đặt các ký tự đó. Số lượng ký tự chính xác có thể thay đổi: .getline()
sẽ dừng trong ba trường hợp: 1. Kết thúc của một dòng được đạt đến 2. Không còn ký tự nào trong đầu vào (không xảy ra bình thường trên std::cin
khi bạn có thể tiếp tục nhập) 3. Số ký tự tối đa được đọc.
Có các phương pháp và chức năng khác có thể được sử dụng với đối tượng std::cin
, ví dụ:
std::string s;
int i;
std::cin >> s; // Read a single word from std::cin
std::cin >> i; // Read a single number from std::cin
std::getline(std::cin, s); // Read an entire line (up to \n) from std::cin
std::cin.ignore(100); // Ignore the next 100 characters of std::cin
Tôi không hiểu câu trả lời này. 'std :: cin' không nhận được gì; nó chỉ là một vật thể. Bạn phải làm điều gì đó với nó (ví dụ: gọi một hàm thành viên như 'get') trước khi nó làm bất cứ điều gì. –
'char s1 [256], s2 [256]; std :: cin >> s1; cin.getline (s2, 256); ' – alvelcom
' std :: cin >> s1' là một cuộc gọi đến một hàm toàn cục 'istream & operator >> (istream &, char *)' –