C++读取单行字符(包括空格、换行符、制表符)
get()
istream类重载了get()方法,分别为get(void), get(char &, int), get(char & , int , char)
- get(void) 输入单个字符,并将其转换为整形,作为参数返回
cout << cin.get()<< endl;
- get(char &)输入单个字符,并将其赋值给char &
char ch;
cin.get(ch);
cout << ch;
- get(char &, int) 第一个参数用于保存输入字符,第二个参数表示最大输入字符个数,存储个数往往比第二个参数小一,最后一个用于存储结尾的空字符
- get(char &, int, char) 第三个参数是指定分界符
char ch[20];
cin.get(ch, 20, 'f'); //输入abcefghi
cout << ch; //结果将输出abcd
getline()
getline()提供了, getline(char &, int), getline(char & , int , char)内容同get()相似
char ch1[20], ch2[20];
cin.getline(ch1, 20);
cin.getline(ch2, 20, '9');
cout << ch1 << " " << ch2;
get()和 getline()的比较
- 两者都读取一行输入,直至到达换行符
区别:
- get()会将换行符保留在输入序列中,这就导致了二次输入操作时,换行符会直接被读取,输入流会认为输入已经结束
char ch1[20], ch2[20];
cin.get(ch1, 20);
cin.get(ch2, 20);
cout << ch1 << " " << ch2;
上述代码只会输出ch1的内容
如何解决该问题呢,只需要先让输入流读取完换行符就可以避免这种情况
char ch1[20], ch2[20];
cin.get(ch1, 20).get();
cin.get(ch2, 20);
cout << ch1 << " " << ch2;
上述getline()为字符数组用法
当需要将读入内容传给string 对象时需改变书写形式
string str;
getline(cin, str);
这表明这个getline()不是类方法。它将cin作为参数,指出到哪里去查找输入。另外也没有指出字符串长度的参数,因为string对象将根据字符串的长度自动调整自己的大小