C++ 输入输出流
I/O
输出流:ostream
输入流:istream
输入输出流:iostream
iostream
中定义了输入流对象cin
与输出流对象cout
。
cin
是一个istream
类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取运算符>>
从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输人流中的空格、tab键、换行符等空白字符。注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符>>
才能从中提取数据。
cout
是一个ostream
类的对象,它通过流插入运算符<<
向输出设备(屏幕)输出其后的变量。程序中的变量借由cout
对象并通过流插入运算符<<
向输出设备输出。
在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。
cin>>
1 |
|
若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符。
若缓冲区为空,则继续等待。
分隔符残留在缓冲区。
cin.get()
1 |
|
结束符残留在缓冲区。
cin.getline()
1 |
|
与cin.get()区别:
- 结束符不会残留在缓冲区。
- cin.get(char*,int)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline(char*,int)当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。
getline()
C++中定义了一个在std名字空间的全局函数getline,因为这个getline函数的参数使用了string字符串,所以声明在了< string>头文件中了。
1 |
|
注意,getline遇到结束符时,结束符不会残留在缓存中。因此,进行从键盘读取一行字符时,建议使用getline,较为安全。
注:如果输入流是文件输入流(即读取文件),则就变为读取文件了。
gets()
gets是C中的库函数,在< stdio.h>申明,从标准输入设备读字符串,可以无限读取,不会判断上限,以回车结束或者EOF时停止读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
1 |
|
cin.good()与cin.fail()用于判断cin输入的类型是否符合要求
1 |
|
另,
1 |
|