继续昨天的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;
} 结果:
今天差不多就到这里吧,应该是差不多能分清楚了。不过这个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;
}
测试结果:
?
|