【C++】学习笔记——基本的输入输出
C++ 标准库提供了一组丰富的输入/输出功能,编程中最基本和最常见的 I/O 操作。
C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。
I/O 库头文件
下列的头文件在 C++ 编程中很重要。
头文件
函数和描述
该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。
该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。
基本的用法
cin——预定义的对象 cin 是 iostream 类的一个实例。cin 对象附属到标准输入设备,通常是键盘。cin 是与流提取运算符 >> 结合使用的
char a[10];
cin >> a;
输入10个字符
cin——预定义的对象 cout 是 iostream 类的一个实例。cout 对象"连接"到标准输出设备,通常是显示屏。cout 是与流插入运算符 << 结合使用
char *a = “HelloWorld”;
cin << a;
把a的字符打印出去
cerr——预定义的对象 cerr 是 iostream 类的一个实例。cerr 对象附属到标准错误设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出。
char *a = “Unable error”;
cerr << "Error message: " << a;
clg——预定义的对象 clog 是 iostream 类的一个实例。clog 对象附属到标准错误设备,通常也是显示屏,但是 clog 对象是缓冲的。这意味着每个流插入到 clog 都会先存储在缓冲在,直到缓冲填满或者缓冲区刷新时才会输出。
char *a = “log is there”;
clog << a;
高级用法
c++中cin的作用是获用户键盘输入的字符
用法如下
using namespace std;
char[] ch;
cin >> ch;
cout << ch;
首先是使用std命名空间然后创建一个char类型数组把输入的字符存入到数组里然后输出
cin还提供了两个get方法
第一个是cin.get()
第二个是cin.get(char)
这两个方法有啥区别呢?
第一个方法是获取一行的字符
另一个作用:可以让窗口一直保持不关闭
用法如下
using namespace std;
char[] ch;
ch = cin.get();
cout << ch;
一样使用std命名空间因为cin是在std命名空间的
使用cin或者cout都得导入iostream头文件
否则将会报错因为要用到流操作所以必须导入
另外还有一个cin.getline(chars,int)方法
这个函数看函数名就知道大概的意思了就是获取一行的字符存入chars数组中至于int呢就是他要写入的长度
比如我输入了一行文字长度总长度为10
然后我调用方法
cin.getline(chars,5);
就是说读取一行中的五个字符存入到chars数组中
这里有个最关键的说明就是
cin >> ch的方法是无法会忽略空白字符如换行符制表符等
所以使用cin.get(char)来解决这个问题
gets函数可直接读取一行
P.S:
cin.get(char[],len);
这个方法是获取下一行多少个字符存入到char[]中包括空白符号如空格换行符等
cin.get()
这个方法可以让窗口不关闭功能和第一个cin.get的使用方法一样不过他不用传入参数而且他只能获取下一个字符包括空白字符
一般这样子使用
cin.get(char[],len).get()
cin.getline(char[],len)
这个函数读取一行的时候遇到换行符或者是指定长度后停止如我想获取五个字符则
cin.getline(char[],6)
这里5+1=6而这个1则是自动添加的空字符
当get读取空行的好时候将设置failbit(失效位)并停止当前的输入
恢复输入需要使用cin.clear把failbit(失效位)清空
当输入包含的字符长度大于了读取的长度时getline和get会将剩余的字符留在输入队列中,而getline也会设置failbit(失效位)后面的输入还是会被阻断
读取数字和字符时如
输入了5回车后需要输入地址但是没有输入就运行完成了因为5后面有空白字符
需要配合使用get方法
(cin>>a).get();来解决这个问题或者使用上述所说的方法来解决
老版本中没有getline推荐使用get更仔细,如何知道程序停止读取的原因是换行符了还是因为已经读满数组了
cout和cin一样都位于std命名空间所以得使用这个命名空间也可以这样子写
std::cout
但是当你要输出的东西的多时候就觉得有点复杂含干脆直接使用命名空间
注意使用cout的时候也要导入iostream头文件因为输出使用了缓冲流
cout使用方法如下
cout << “输出哟”;
方法二cout.put(char)这个函数主要是输出一个字符而不是一段文字
注意的是cout默认是以DEC(十进制)输出的
若想使用八进制和十六进制方法如下
cout << hex十六进制输出
cout << oct 八进制输出