Hỏi về sự khác nhau giữa getline và cin.getline trong C++
Chào các anh(chị, bạn)
Em đang thắc mắc 1 vấn đề nhỏ giữa hàm getline và cin.getline trong c++ như sau:
đầu tiền e có 1 chương trình sau:
#include <iostream>
#include <string>
using namespace std;
main()
{
string strTen;
char strHo[50];
char cKitu;
int iTuoi;
cout <<"Nhap tuoi ";
cin>> iTuoi;
cout <<"Nhap ki tu ";
cin.ignore(1);
cin.get(cKitu);
cout <<"Nhap ten ";
fflush(stdin);
getline(cin, strTen);
cout <<"Nhap ho ";
cin.getline(strHo,5);
cout <<"Tuoi "<<iTuoi<<endl<<"Ki tu "<<cKitu<<endl<<"Ten "<<strTen<<endl<<"Ho "<<strHo<<endl;
system("pause");
return 0;
}
trong chương trình có 2 biến
string strTen;
char strHo[50];
vấn đề e muốn hỏi là
biến strTen được khai báo với kiểu dữ liệu string
( trong khai báo header string đã có typedef cho kiểu dữ liệu xâu nhưng e k biết nó typedef bao nhiêu phần tử cho xâu và cũng k rõ lắm về header string typedef như thế nào ?)
khi dùng biến strTen với lênh sau thì vẫn ổn
getline(cin, strTen);
(chép hết dữ liệu từ stdin vào biến strTen)
nhưng khi dùng biến strTen với lênh sau khi không được
cin.getline(strTen,5);
(cho phép nhập 5-1 kí tự vào xâu strTen)
và ngược lại
với biến strHo được khai báo char strHo[50];
thì dùng với lệnh sau thì ổn
cin.getline(strHo,5);
nhưng dùng với lệnh
`getline(cin, strHo);
thì lại k được
kết: tại sao với biến khai báo :
#include <string>
string strTen;
thì chỉ dung được với
getline(cin, strTen);
không dùng được với cin.getline(strTen,5);
và ngược lại
với khai báo biến char strHo[50];
thì chỉ dùng được với cin.getline(strHo,5);
không dùng được với getline(cin, strHo);
sự khác nhau ở đây là gì?
tiện thể giải thích giúp e trong header string nó làm gì trong đó luôn ạ
XINCAMON
Ngay trong reference của c++ cũng có nói rồi
Một cái chỉ dùng đc cho string,
còn 1 cái dùng cho char.
Thật ra cái getline(cin,string) là hàm đc overload lại từ hàm kia ^^
chỉ đơn giản là nó quy định 1 cái dùng cho string 1 cái dùng cho char à, bạn nói rõ hơn được không?
ban có thể nói thêm về header string được không?
tks bạn
header string là cái thư viện
<string>
đó bạnCòn 2 hàm trên đơn giản là hàm lấy các kí tự trên buffer đến khi gặp kí tự dừng (delim) thì nó dừng lại. Mặc định là kí tự
\n
Đối với cin.getline() thì nó hơi khác tí là nó phải có giới hạn. Khi quét đủ giới hạn rồi thì dừng.
cin.getline
:istream& cin.getline(char *str, int n, char delim = '\n')
Đọc dãy ký tự tính cả khoảng trắng vào bộ nhớ do
str
trỏ tới, quá trình đọc kết thúc khi gặp ký tự kết thúc chuỗi'\0'
hoặc nhận đủn-1
ký tự, ký tựEnter
được loại bỏ không đưa vào dãy ký tự nhận đượccin.getline((char *)strTen.c_str(), 20);
// Ép kiểustring
sangchar
getline(cin, (string)strHo);
//Ép kiểuchar
sangstring
ý mình hỏi trong header này nó typedef như thế nào, kiểu dữ liệu string được khai báo ? phần tử …v.v.v.v ấy
(Y) tks bạn, rất chi tiết