C++初学者指南-2.输入和输出—流输入和输出
文章目录
- C++初学者指南-2.输入和输出---流输入和输出
- 1.定制输入/输出
- 1.1 示例:点坐标输入/输出
- 1.2 流操作符
- 1.3(一部分)标准库流类型
- 2. 工具
- 2.1 用getline读取行
- 2.2 用ignore进行跳转
- 2.3 格式化操作
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
运行上面代码
附上原文地址
如果文章对您有用,请随手点个赞,谢谢!^_^