一、每次输入一个字符
1.使用原始的cin进行输入:
char ch;
cin >> ch;
特点: cin在读取char值时,与其他基本类型一样,cin将忽略空格和换行符,因此输入的空格不会被回显,也不会被包括在计数内。发送个cin的输入被缓冲,只有按下回车键后,输入才会被发给程序。
2.使用cin.get(char):
因为C++的函数重载。所以cin.get()有三个版本。
*char ch;
cin.get(char); //只接受一个char参数
*char name[Size];
cin.get(name, Size); //一次性可以输入一个字符数组
*cin.get(); //没有任何参数
ch = cin.get(); //没有任何参数
3.文件尾(EOF)操作条件
在很多PC编程环境中,常常都将Ctrl+Z视为模拟的EOF。
在检测到EOF后,则cin将两位(eofbit和failbit)都将设置为1,可以通过成员函数eof()来查看eofbit是否被设置;如果被设置cin.eof将返回true,否则返回false。如果EOF被设置,则fail()返回true,否则返回false。两个函数都是事后报道,因此应将cin.eof()/cin.fail()放在读取后面。
eg:
char ch;
cin.get(ch);
//while(cin.fail() == false)
while(cin.eof() == false)
{
…
}
cin.get(ch) 与 cin.get()
cin.get(ch): 赋给参数ch;函数的返回值为istream对象(执行bool转换后为true);达到EOF时函数的返回值为istream对象(执行bool后转换为false)。
ch = cin.get(): 将函数返回值赋给ch;函数的返回值为int类型的字符编码;达到EOF时函数返回EOF。
char ch;
int count = 0;
cin.get(ch);
//while(cin.fail() == false) //在新的一行开头输入 ctrl + z来模拟
//while(!cin.fail())
//while(cin) //istream类对象提供一个可以将istream对象转换为bool值的函数;当需要bool值时,该函数被调用
//while(cin.get(ch)) //cin.get(char)返回值为cin
//while(cin.eof() == false)
while(!cin.eof())
{
cin>>ch;
++count;
//cin.get(ch);
}
cout<< endl << count << " characters read\n";*/
二、每次输出一个字符
1、put()方法:
cout.put(‘w’); 该函数返回值也是一个只想到用对象的引用,因此可以用它将拼接输出:
cout.put(‘w’).put(‘w’);
2、write()方法:
返回类型为ostream&。
char name[20];
cout.write(name, 20);
3、刷新缓冲区:
cout<< “hello world!” << flush;
控制符flush刷新缓冲区,而控制符endl刷新缓冲区,并插一个换行符。
也可以这样调用:flush(cout); cout<<flush;
三、字符串输入
1、getline():
原型:
istream & getline(char *, int , char);
istream & getline(char *, int);
第一个参数为放置输入字符串的内存单元地址,第二个参数要比读取的最大字符数大1(用作结尾符)。第三个参数指定用作分界符的字符。
char name[23];
cin.getline(name, 23);
getline()与get()最大区别是:get()将换行符留在输入流中,这样接下来的输入操作将是换行符,而GetLine()抽取并丢弃输入流中换行符。
2、get():
原型:
istream & get(char *, int , char);
istream & get(char *, int);
get()参数含义与getline()相同。
下面的代码可以作为测试:
cout<< "字符串输入" <<endl;
cout<< "面向行的输入:getline()" <<endl;
char name[20];
int year;
cin>>year;
cin.get(); //抽取换行符
cout<< "Enter your name: ";
cin.getline(name, 20); //抽取并丢弃换行符
cout<< "year: " << year <<endl;
cout<< "Your name: " << name <<endl;
cout<< "面向行的输入:get()" <<endl;
cout<< "Enter your name: ";
cin.get(name, 20); //没有丢弃换行符
cin.get(); //抽取换行符
//cin.get(name, 20).get(); //同上面两行作用相同
cout<< "Your name: " << name <<endl;