1.get()
使用gas函数可以输入一个或多个字符,有多种重载格式,其函数原型如下:
(1)int get();
(2) istream& get(char& c);
(3) istream& get(char * s, streamsize n);
(4) istream& get(char* s, streamsize n, char delim);
(5) istream& get(streambuf& strbuf);
(6) istream& get(streambuf& strbuf, char delim);
其中,前两个函数可以从输入流中读取一个字符,
第(1)个函数返回值是读取的字符的
ASCⅡ值,
第(2)个函数把读取的字符存储在变量c中;
第(3)个和第(4)个函数从输入流中读取二1个字符或者遇到换行符n(第(3)个函数)遇到 delim(第(4)个函数)表示的终止符结束,读取的字符存储到C语言风格的字符串s中,在字符串s的末尾自动添加空字符10;
最后两个函数从输入流中读取字符插入 strbuf表示的输出流中,遇到\n或 delim表示的终止符结束。
注意:
多余的字符、换行符‘\n’、终止符delim仍然留在输入流中
例如:
char ch;
ch = cin.get();//使用第一个函数
cin.get(ch); //使用第二个函数
char str[20];
cin.get(str, 20);//最多读取19个字符,或者遇到换行符结束
cin.get(str, 20, '*');//最多读取19个字符,或者遇到‘*’结束
cin.get(*cout.rdbuf());//从输入流中读取字符并输出到显示器上,遇到换行符结束
cin.get(*cout.rdbuf(),'*');// 从输入流中读取字符并输出到显示器上,遇到‘*’结束
2.getline()
getline()函数从输入流中提取多个字符。其函数原型如下:
(1) istream& getline(char * s, streamsize n);
(2) istream& getline(char* s, streamsize n, char delim);
从输入流中读取n-1个字符,遇到换行符"n’结束(第(1)个函数)或者遇到终止符delim(第(2)个函数)结束,把读取的字符存储在C语言风格的字符串s中,在s的末尾自动添加空字符‘\0’。
与get()函数不同的是, getline(函数的换行符n和终止符deim从输入流中读出并丢弃,不存储在字符串s中。
如果未读取到字符,或者读取n-1个字符后仍然没有遇到终止符,流状态标志 failbit被设置。如果终止符恰好是第n个字符,即读取n-1个字符后恰好遇到终止符,流状态标志 failbit不会被设置。
注意:
用get(函数或 getline()函数读取多个字符构成的字符串只能存储到C语言风格的字符数组中,如果用 string对象存储字符串,则不能使用上述两个 Istream的成员函数,应该使用全局函数 getline()。其函数原型如下:
(1)istream& getline(istream& is, string& str);
(2)istream& getline(istream& is, string& str, char delim);
(3)istream& getline(istream&& is, string& str);
(4)istream& getline(istream&& is, string& str, char delim);
我们主要使用前两个重载函数,其功能是从输入流is中读取字符存储到 string类型的对象str中,遇到换行符\n’(第(1)个函数)或终止符 delim(第(2)个函数)时结束。例如:
string s;
getline(cin, s);
3.read()
read()函数原型如下:
istream& get(char * s, streamsize n);
**函数功能:**从输入流中读取n个字符存储到首地址是s的内存空间中。如果还未读取
n个字符就到文件末尾,则把实际读取的字符串存储到s中,流状态标志 eorbit和 failbit被设置。