继续昨天的cin.get()、【成员函数:cin.get(数组名,数组长度,结束符)】、cin.getline()
- cin>>是从第一个非空白字符开始到下一个空白字符结束(缓冲区读数,残留数据(包括该结束的空白字符)下次直接读入,跳过输入)
- cin.get()
它与cin.get(数组名,数组长度,结束符)是重载(函数名相同,但参数不同,所以达成的作用完全不同)- ch=cin.get()和cin.get(char ch)都是读取一个字符的意思
- 且都对空格、制表符、换行符号不敏感,可以读入
-
#include<iostream> using namespace std; int main() { cout << "请输入两个字符:"; char a, b; //输入无空格、含space、tab、enter a = cin.get(); b = cin.get(); cout <<"a为:"<< a << int(a) << endl; cout <<"b为:"<< b << int(b) << endl; return 0; }
-
无空格
-
有space(ASCII为32)
-
有tab(ASCII为9)
-
有enter(ASCII为10)
-
- 成员函数:cin.get(数组名,数组长度,结束符【默认为enter,且结束符仍在缓冲区】)
- 当一开始第一个输入字符(即前面无其他任何字符)就遇到结束符情况下,将不会正常输出,但缓冲区中依然有该结束符
#include<iostream> using namespace std; int main() { char a[5], b; //输入“字符A立即enter” cin.get(a,3,'A');//所以a在一开始就结束,不能正常输出,后续b也不能正常输出 //利用cin.clear()可以清楚缓冲区中的错误数据 cin.clear(); cin.get(b); cout << "a为:" << a << int(a) << endl; cout << "b为:" << b << int(b) << endl; return 0; }
-
若无cin.clear()
-
若有cin.clear()
-
- 当一开始第一个输入字符(即前面无其他任何字符)就遇到结束符情况下,将不会正常输出,但缓冲区中依然有该结束符
- cin.getline(字符数组名,接收长度【可以超过本身定义的长度】,结束符)
用法与cin.get(字符数组名,接收长度,结束符)极为类似- cin.get()当输入超长时不会引起错误,后面cin操作会继续执行,且直接从缓冲区中取数据
结果:#include<iostream> using namespace std; int main() { char a[5], b; cin.get(a,3); cin >> b; cout << "a为:" << a << endl; cout << "b为: " << b << endl; return 0; }
- cin.getline()当输入超长时会引起错误,后面的cin操作将不再执行
结果:#include<iostream> using namespace std; int main() { char a[5], c; cin.getline(a,3); cin >> c; cout << "a为:" << a << endl; cout << "c为: " << c << int(c) << endl; return 0; }
- cin.get()当输入超长时不会引起错误,后面cin操作会继续执行,且直接从缓冲区中取数据
今天差不多就到这里吧,应该是差不多能分清楚了。不过这个CSDN的编辑操作把我搞懵了,我一个ctrl+z就把我一大段的东西都撤销了,而且恢复不了,还好几次都这样,就离谱!!!
最后还是练了几道题:
字符串逆序输出
#include<iostream>
using namespace std;
int main() {
char str[100], * s1=str, * s2=str, t;
cin.getline(str, 100);
//s1指向首地址,s2指向尾地址
while (*s2 != '\0')
s2++;
s2--;
//交换头尾所指内容,地址传递
while (s1 < s2) {
t = *s1;
*s1 = *s2;
*s2 = t;
s1++;
s2--;
}
//非字符数组是不能整体输出的
cout << str << endl;
return 0;
}
测试结果: