cin.getline()和getlin()的区别
一.getline()有两个重载版本,getline()是istream类的一个全局函数
函数原型
- istream& getline (istream& is, string& str, char delim);
- istream& getline (istream& is, string& str);
函数调用
- getline(cin, s)
- getline(cin, str, '~')
1.getline()默认以换行符'\n'结束
# include<iostream> # include<string> using namespace std; int main() { string str,s; cin >> str; getline(cin, s); system("pause"); return 0; }
输入:one two TWO;str="one",s="two Two"
- cin遇到空白符(空格、制表符、回车)结束输入,并把空白符留在输入缓冲中
- getline()会将空格,tab键会像普通字符一样赋值给s,遇到换行符结束,并且会丢弃换行符
2.getline可以指定换行符,将'\n'保存在字符串中
# include<iostream> # include<string> using namespace std; int main() { string str,s; getline(cin, s); getline(cin, str, '~'); system("pause"); return 0; }
输入:
one[空格]two[回车]
[回车]
three[空格]four[空格]five[回车]
six[回车]
~[回车]
结果:
s="one two",two后面的换行符丢弃,所以str="\nthree four five\nsix\n"
二.cin.getline(),是istream类的一个成员函数。遇到换行符或输入字符个数大于第二个参数就结束输入;也会丢弃换行符
函数原型
- istream& getline(char* s, streamsize n);
- istream& getline(char* s, streamsize n, char delim);
函数调用
char sz[100];
- cin.getline(sz, 100)
- cin.getline(sz, 100, '~')
cin.getline()的用法和getline()类似,
第一个参数:数组地址首地址
第二个参数:数组大小
第三个参数,可选:结束符
1.如果输入字符个数大于第二个参数时,输入的字符串过长,余下的字符会留在缓冲区,会导致cin流状态无效,不能再输入,使用cin.clear()与cin.sync()(清空缓冲区)函数可以重设cin的状态为有效。
- cin.clear()是用来更改cin的错误状态标示符的。
- cin.sync()是用来清除缓存区的数据流的。