文章

c++(3`I/O库)

I/O库

输入和输出并不是C++语言中的正式组成成分,而是在c++ std(Standard Library标准库)中的io库中定义的:

流(stream):

描述字节序列在设备和内存流动的现象

输入输出:

1742627505358

如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,是输入操作

如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),是输出操作

流运算符

流提取运算符’»‘用于从左侧输入流中提取(意味着缓冲区中不存在了)数据 存储到右侧对象中

流插入运算符’«‘用于将右侧对象数据 插入到左侧输出流对象中

输入输出流对象

分类:

  • 键盘输入数据,输出到显示器屏幕,称为标准的输入输出流对象
  • 磁盘文件间的输入输出,称为文件的输入输出流对象
  • 内存中指定的空间进行输入和输出,称为字符串输入输出流对象

标准输入输出流

1
#include <iostream>

展开

std::istream:标准输入流类

std::ostream:标准输出流类

std::iostream:标准输入输出流类

std::cin 标准输入流对象:用于从标准输入读取数据

std::cout 标准输出流对象: 用于将数据输出到标准输出

std::cerr: 标准错误流对象: 用于输出错误信息

std::clog: 标准日志流对象: 用于输出日志信息

常见形式:

1
2
3
4
5
6
7
int x;
std::cin >> x;//从左往右理解
getline(cin, line);
int a, b;
while (cin >> a >> b) {
}
std::cout << "The answer is " << 42 << std::endl;//从右往左理解

展开

endl

  • 换行:在输出流里插入一个换行符’\n’
  • 刷新缓冲区:将输出缓冲区里的内容立即输出到目标设备

用户输入与cin

分隔符:

  • 用户输入字符串后,以空格、tab或换行(可以理解为仅间隔大小不同)作为每个数据的分隔符
  • cin读取用户时,会忽略前导的空白字符,直到遇到非空白字符开始读取,然后在遇到下一个空白字符时停止读取

推送:

  • 按下回车,首先会将字符串送入到标准输入缓冲区,然后(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算,
  • :» 从cin读取数据,本质上是从标准输入缓冲区(临时内存)读取
  • 其实用户输入:a[回车]11[回车]5.56[回车] == a[空格]11[空格]5.56[空格][回车],因为都是3个数据被存放到缓冲区

输入个数:

  • 输入不足:cin 会等待用户继续输入,直到满足需要的数据个数(每出现»个数++,每»提取后个数–)
  • 输入过多:多余的数据会留在输入缓冲区中,供后续的 cin 使用

对while理解:

会循环接受用户输入,直到条件为假

  • 用户输入了n个数据后,while 条件为真,执行循环体后再次等待用户输入(遵守输入不足/过多情况)
  • 按下 Ctrl+D(Linux/Mac)或 Ctrl+Z(Windows),cin 会检测到文件结束符(EOF),while 条件为假,循环结束
  • 如果用户输入的是无效输入(类型不正确),cin 会进入错误状态,while 条件为假,循环结束

其他读取方法:

1
2
3
4
char name[256]; 
cin.getline(name, 256);
string name1;
getline(cin, name1);

展开

  • getline 会从输入流中读取整行内容,直到遇到换行符为止,并将换行符从缓冲区中移除,将结果存储到字符串

输出精度

1
2
3
4
#include <iomanip>
int curRes = 10, curCount = 3;
double average = static_cast<double>(curRes) / curCount;
cout << fixed << setprecision(2) << average << endl;//保留两位小数

展开

acm模式:

  • 头文件,用到哪个库要预处理指令包含进来
  • 数据读取,用户一定会按照示例输入的方式输入,正常读取就好
  • 结果输出,用cout输出结果

文件输入输出流

1
#include <fstream>

展开

std::ifstream:文件输入流类

std::ofstream:文件输出流类

std::fstream:文件输入输出流类

常见形式:

说标准输入输出流通常使用自带的cin、count对象,而文件输入输出流通常要自己构建流对象,然后调用类函数

1
2
3
std::ofstream outFile("example.txt");
is_open()//是否打开
close()//关闭

展开

字符串输入输出流

1
#include <sstream>

展开

std::istringstream:字符串输入流类

std::ostringstream:字符串输出流类

std::stringstream:字符串输入输出流类

本文由作者按照 CC BY 4.0 进行授权
本页总访问量