01/10/2018, 00:32
Sự khác nhau giữa get và getline. Cách hoạt động của 2 hàm đó
Xin hỏi a/c là như 2 hình trên tại sao get lại lây sang biến khác , e đã đảo ngược getline lên trước thì lại không bị . Và cách hoạt động của 2 hàm đó ?
Bài liên quan
không có chuyện đó nhé, chưa đủ mà gặp enter nó vẫn ngưng nhé
get
: khi gặp kí tự phân tách (delimiter), thì nó ngừng, và đưa delimiter này vào buffer chờ đọc tiếp (đó là lý do vì sao ở hình đầu, chắn chắn lệnh getline sẽ bị trôi, vì ghi getline nó ưu tiên trong buffer trước và buffer đang có dữ liệu nên nó sẽ đọc thằng'\n'
vào).getline
: khi gặp delimiter, nó sẽ ngừng, đồng thời bỏ qua luôn thằng này, lệnh nhập tiếp theo, sẽ bắt đầu sau delimiter này, vì vậy mà ở hình thứ 2, sau khi chạy xong getline, buffer rỗng (thằng'\n'
đã bị bỏ qua) nên nó đọc được dòng tiếp theo.em học chưa tới, cảm ơn anh đã khai sáng
anh giải thích kỹ giúp e tí , e đọc nảy h hơn chục lần mà hông hiểu gì hết T_T
Giống: cả 2 hàm đều ưu tiên đọc từ buffer trước rồi sau đó mới nhận dữ liệu từ input nếu cần.
get
: khi đọc đến kí tự phân tách (delimiter) thì nó ngưng và kí tự phân tách này vẫn nằm trong buffer (tức là nó dừng NGAY TRƯỚC delimiter, và kí tự này sẽ được dùng trong lệnh đọc tiếp theo.getline
: khi đọc đến delimiter thì nó ngưng và kí tự phân tách bị loại bỏ, tức là nó không nằm trong string (vì dừng khi gặp nó nên không đọc nó vào) và cũng bị xóa khỏi buffer.Hay một cách dễ hiểu là thằng
get
sẽ kiểm tra kí tự tiếp theo nếu không phải là delimiter thì mới lấy ra đưa vào string, còn thằnggetline
là lấy ra trước rồi mới kiểm tra.dạ anh ơi , em có test chương trình ở hình 1 khi em cin.get() thêm 1 lần nữa thì cái lệnh cin.getline() hết bị trôi mà anh nói là cin.get() nó đưa cái delimiter vào buffer
Vậy cin.get() thêm lần nữa chi , nó cũng đưa vào buffer tiếp vậy anh ? Em cảm ơn
Vì thằng get cũng như getline, đều ưu tiên đọc trong buffer. Vì vậy ở get thứ 2, buffer không rỗng, nên nó sẽ lấy dữ liệu trong đó ra để đọc và làm cho buffer rỗng. Nên lệnh getline tiếp theo sẽ đọc mới hoàn toàn (không bị trôi lệnh)
Nếu nhớ không nhầm là vậy :3