2011-01-20 16 views

Trả lời

18

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.

+6

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ì. –

+1

'char s1 [256], s2 [256]; std :: cin >> s1; cin.getline (s2, 256); ' – alvelcom

+3

' std :: cin >> s1' là một cuộc gọi đến một hàm toàn cục 'istream & operator >> (istream &, char *)' –

9

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ô.

+3

đườ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

+0

@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

+0

@etarion: Bắt tốt. Đang cập nhật câu trả lời ngay bây giờ ... –

24

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