1.cin和cout简介
cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。
在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7,而不是6。
cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。
有关流对象cin?cout和流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用cin、cout和流运算符,就必须使用预处理命令把头文件iostream包含到本文件中,并使用命名空间std:
#includeiostream
usingnamespacestd;
根据C++的语法,凡是能实现某种操作而且最后以分号结束的都是语句。
2.cin和cout的基本操作
A.cout语句的一般格式为:
cout表达式1表达式2表达式3...表达式n;
b.cin语句的一般格式为:
cin变量1变量2变量3.....变量n;
cout:在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或’\n’,ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。
一个cout语句可以分成若干行。如:
1)cout"thisisasimplec++."endl;
2)cout"thisis"//注意没有分号
"aC++"
"program."
endl;
3)cout"thisis";//有分号
cout"aC++";
cout"program.";
coutendl;
输出结果差不多。
不能用一个插入运算符“”插入多个输出项:
在用cout输出时,用户不必通知计算机按何种类型输出,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。如已定义a为int型,b为float型,c为char型,则:
coutabcendl;
输出结果为:43.14a
cin:与cout类似,cin语句可以分成若干行
1)cinabcd;
2)cina//这样的写法比较清晰
b
c
d;
3)cina;
cinb;
cinc;
从键盘输入的结果都一样:1enter键23enter键4
在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节?如有:
不能用cin语句把空格字符和回车换行符作为字符输入给字符变量,他们将被跳过。
3.cin的常用读取方法cin可以连续从键盘读取想要的数据,以空格、enter或换行作为分隔符。
#includeiostream
usingnamespacestd;
intmain()
{
chara;
intb;
floatc;
string
cinabc;
couta""b""c""endl;
system("pause");
return0;
}
在屏幕中一次输入:a[回车]11[回车]5.56[回车]
程序将输出如下结果:
注意:
(1)cin等价于cin.operator(),即调用成员函数operator()进行读取数据。
(2)当cin从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin不做处理。
(3)不想略过空白字符,那就使用noskipws流控制。比如cinnoskipwsinput;
从键盘输入:[回车][回车][回车]a[回车]5[回车]2.33[回车]hello[回车],输出结果是:
从结果可以看出,cin对缓冲区中的第一个换行符视而不见,采取的措施是忽略清除,继续阻塞等待缓冲区有效数据的到来。但是,getline()读取数据时,并非像cin那样忽略第一个换行符,getline()发现cin的缓冲区中有一个残留的换行符,不阻塞请求键盘输入,直接读取,送入目标字符串后,再将换行符替换为空字符’\0’,因此程序中的test为空串。
ENDDotcpp接受大家发表各大OJ的题解重点用户还会有礼品相送~欢迎搜索c语言网: