C++初学者指南-2.输入和输出---流输入和输出

C++初学者指南-2.输入和输出—流输入和输出

1.定制输入/输出

1.1 示例:点坐标输入/输出

通过使用名称为 operator<< 和 operator>> 的两个函数重载。

struct point { int x;  int y; };

std::ostream& operator << (std::ostream& os, point const& p) {
  return os << '(' << p.x << ',' << p.y << ')';
}

std::istream& operator >> (std::istream& is, point& p) {
  return is >> p.x >> p.y;
}
point p {1,2};
cout << p << '\n';   // 打印 (1,2)
…
cin >> p;  // 读取2哥整形值到p.x和p.y

1.2 流操作符

类型T的对象的流输入/输出操作函数:

std::ostream& operator << (std::ostream& os, T const& x) {
  // write to stream …
  return os;
}
std::istream& operator >> (std::istream& is, T& x) {
  // read from stream …
  return is;
}

操作符<<和>>返回一个引用(指向它们的stream参数),以允许操作符连缀:

cin  >> x >> y;  ⇔  operator>>( operator>>(cin, x), y)
cout << x << y;  ⇔  operator<<( operator<<(cout,x), y)

标准库中针对像 std::vector 这样的容器的默认流操作是不存在的,因为存在太多可能的用例:

  • 只是打印值… 用什么分隔?
  • 将输出格式化为纯文本 / XML / …
  • (反)序列化容器

1.3(一部分)标准库流类型

istream输入流istream&引用可以绑定到任何其他类型的std:: 输入流
ostream输出流ostream&引用可以绑定到任何其他类型的std:: 输出流
ifstream文件输入流提取的数据是从文件中读取的
ofstream文件输出流插入的数据存储在一个文件中
ostringstream字符串输出流插入的数据存储在字符串缓冲区中
istringstream字符串输入流提取数据是从字符串缓冲区中读取的

2. 工具

2.1 用getline读取行

std::getline (istream&, string&, stopat='\n')

读取直到下一个停止符号(默认为直到行尾)

string s;
getline(cin, s);           //读取一整行
getline(cin, s, '\t');     //读取直到遇到制表符
getline(cin, s, 'a');     //读取直到遇到字符'a'

2.2 用ignore进行跳转

std::istream::ignore(n, c)
  • 向前移动 n 个字符
  • 直到停止字符 c
// 跳过8个字符
cin.ignore(8);
// 跳过最多10个字符或者遇到'='
cin.ignore(10, '=');
// 跳过所有字符直到遇到换行符'\n'
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

2.3 格式化操作

#include <iomanip>                 // 头文件
double d = 12.345678;              
double e = 2011;
double f = 1e-10;
std::cout << d                     // 12.345678 
<< e << '\n'                       // 2011
<< f << '\n'                       // 1e-010
<< std::setprecision(4)            // 设置输出几个数字(包含整数)
<< d << '\n'                       // 12.35
<< e << '\n'                       // 2011
<< f << '\n'                       // 1e-010
<< std::fixed                      // 用定点表示法表示浮点数,这是签名设置的数字4变成了小数点后的位数
<< d << '\n'                       // 12.3457
<< e << '\n'                       // 2011.000 
<< f << '\n'                       // 1.0000-e010
<< std::scientific                 //用科学计数法表示
<< d << '\n'                       //1.2346e+001
<< e << '\n'                       //2.0110e+003
<< f << '\n'                       //1.0000e-010
<< true <<' '<< false              //1 0
<< std::boolalpha                  //用字符串表示布尔值
<< true <<'  '<< false;             //true false

运行上面代码

附上原文地址
如果文章对您有用,请随手点个赞,谢谢!^_^
在这里插入图片描述

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值