- 标准输入输出流
- 文件输入输出流
- 字符串输入输出流
标准输入输出流
即标准输入流cin、标准输出流cout。前者指键盘,后者指显示器。
1插入符与提取符
在输入输出流类库中,重载了两种运算符以简化输入输出流的使用,运算符<<常用做输入输出流的插入符,表明“输出到”,例如cout << “Hello”是把字符串“Hello”输出到屏幕上;运算符>>常用做提取符,表明“赋值给”,例如 cin >> i 是把键盘输入的信息赋值给i。
标准输入给不同类型变量赋值的不足示例。
#include <iostream>
using namespace std;
int main() {
int i;
char str[20];
cout << "请输入一个整形数及一个字符串:" ;
cin >> i >> str;
cout << "i=" << i << endl ;
cout << "str=" << str << endl ;
return 0;
}
若在命令行上输入1 how are you?,回车后执行结果为:
请输入一个整形数及一个字符串:1 how are you?
i=1
str=how
实际上在交互过程中,经常需要一次输入一行字符序列,当这些字符安全地存储到缓冲区后再进行扫描和转换工作。在该示例中,并不能把输入的串完全的放到内存中,下面讲到的get系列函数很好的解决了这个问题。
2 get系列函数
常用的有3个函数。
(1)int get() ; 返回输入流一个字符的ASCII值。
(2)istream& get(unsigned char* pszBuf, int nBufLen, char delim=’\n’);
pszBuf: 指向字符缓冲区的指针,用于保存结果 nBufLen: 缓冲区长度 delim: 结束字符,根据结束字符判断何时停止读入操作
(3)istream& getline(unsigned char* pszBuf, int nBufLen, char delim=’\n’); 参数解释同get
第2个get函数及getline函数都是读一行记录,那么它们有什么区别呢?细微而重要的区别在于:当遇到输入流中的界定符(delim,即结束字符)时get()停止执行,但是并不从输入流中提取界定符,直接在字符串缓冲区尾部加结束标志’\0’;函数getline()则相反,它将从输入流中提取界定符,但仍然不会把它存储到结果缓冲区中。
#include <iostream>
using namespace std;
int main() {
char szBuf[60]; //定义输入字符串接收缓冲区
cout << "请输入一个字符串:" ;
int n = cin.get(); //先读1个字符
cin.getline(szBuf, 60); //接着读1行字符,遇到结束符’\0’停止
cout << n << endl;
cout << "The received string is: " << szBuf << endl;
return 0;
}
//输出结果
请输入一个字符串:abcde
97
The received string is: bcde
3 处理流错误
获取状态信息的函数如下:
- int r