#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, const char * argv[])
{
// insert code here...
// std::cout << "Hello, World!\n";
char ch; cout<<"Enter characters; enter # to quit:\n";
/*
版本一:
程序无法打印空格
如输入:hello world I I # nm
输出:helloworldII
因为cin读取char值时,cin将忽略空格和换行符
*/
/*版本二:
使用cin.get(ch)可解决空格问题(cin.get(ch)返回值为一个对象,不是读取的字符)
cin.get(ch) 读取输入中的下一个字符(即使他是空格),并将输入复制给变量ch
*/
cin.get(ch);
while (ch!='#') {
cout<<ch;
cin.get(ch);
}
/*
版本三:
为了加强可移植性,使用EOF作为结束
在C++中cin提供eofbit 和 failbit 两种标志,在检测到EOF时eofbit和failbit都设为1
可以通过成员函数eof 和fail 来检测是否被设置
如果设置EOF 那么cin.eof() 返回bool值TRUE 否则返回FALSE,
如果eofbit 和 failbit被设置为1,则cin.fail()返回TRUE,否则返回FALSE
*/
cin.get(ch);
while (cin.fail()==false/*检测EOF结束标志,输入EOF cin.fail()返回TRUE*/) {//while(!cin.fail())
cout<<ch;
cin.get(ch);
}
//版本四:
/*
对于无参数的ch=cin.get(),返回值为输入中的下一个字符,与C语言中的getchar()相似
同样可以使用cout.put(ch),来输出
*/
int chr; //声明为int ,判断EOF时返回值为-1,char类型无-1
while ((chr=cin.get())!= EOF) {//注意chr=cin.get()的括号
cout.put(char(chr));
}
return 0;
}