/*cin和cin.get(char)的区别*/
#include<iostream>
using namespace std;
int main() {
/*1、cin的输入设置是缓冲的,只有你按下回车键才会发送给程序
2、cin对于输入是忽略空格和换行的,以下例子中输入空格不包含对空格个数的统计,并且输出中无空格
3、in只有强制的结束标志,即回车,回车对于多行是方便处理的,对于不满一行的字符串的输入,此时就要自定义一个结束字符,此处我用的是‘#'字符
4、注意:cin的使用是要在使用循环前读取一个字符进行初始化*/
char ch;
int count = 0;
cin >> ch;//初始化
while (ch != '#') {
cout << ch;
++count;
cin >> ch;
}
//运行结果:
/*1、cin.get(char)的底层实质上将输入还是会转化为cin的输入形式,区别就是多了对空格字符的统计,返回值为对象ch
2、cin.get()中括号可以放两个参数(数组名(字符串char*),整数)也可以放一个参数(char),也可以不接受参数
为什么会出现参数输入的多样性呢?由于C的底层是不接受函数重载,而在C++中接受函数重载(即相同函数名不同参数的函数,用于函数功能的扩大,兼容性更好)*/
char ch;
int count = 0;
cin.get(ch);//初始化
while (ch!= '#') {
cout << ch;
++count;
cin.get(ch);
}
//运行结果:
/*1、cin.get()的返回的是输入的下一个字符的ASCII码,即整数,故要用int类型的ch去接收
2、由于其要显示字符那么该cin.get()常与cout.put(char(ch))搭配使用
3、cin.get()的结束标志是EOF,其整型值为-1,代表没有可返回的字符
4、由于cin.get()会把'\n'也认为为输入的字符,故其输入完成后,连续按下两次enter,再在键盘上按下ctrl+Z后出现^Z后,再按enter,此操作在告诉程序没有可返回的字符
注意:其输出统计的字符串的长度会比实际长度多1,那是因为enter键出现的'\n',解决办法是在循环中加上判断条件if(ch!='\n')就可以解决该问题*/
int ch;
int count = 0;
while ((ch=cin.get()) !=EOF) {
if (ch != '\n') {
cout.put(char(ch));
++count;
}
}
cout << endl << count << "字符读取长度";
return 0;
}
//运行结果: