C++IO流
流: 若干字节数据从一端到另一端我们叫做流
流类体系
- 流对象
- 流运算符:
-
<<:向左流入
-
>>: 向右流出
输出输出流
- ostream类
<< 重定向:输入输出定向为文件- cout :标准输出 可以重定向
- cerr :标准错误输出 不能重定向
- clog :标准错误输出 重定向为文件
- cin : 标准输入
#include"iostream"
#include"cstdio"
using namespace std;
void testiostream()
{
cout << "标准输出" << endl; //重定向
cerr << "标准错误输出" << endl; //不能重定向
clog << "标准错误输出" << endl;重定向为文件
}
void freopeniostream()
{
freopen("1.txt", "r", stdin);// 把基本输入定向为输入文件
int a, b;
scanf("%d%d", &a, &b);
printf("%d", a + b);
}
int main()
{
// testiostream
testiostream();
freopeniostream();
return 0;
}
-
字符类的处理
- 正常的操作
- 调用成员函数的方式
str 需要字符串结束标记
str[20]="";
-
格式控制字符
- 包含头文件 iomanip
- 常用的格式控制,一种是调用成员函数方式,一种流控制字符去做
- 设置有效位数: setprecision(n)
- 设置精度: fixed结合setprecision使用
-
istream 类 cin
#include"iostream"
#include"cstdio"
#include <iomanip>
using namespace std;
void testiostream()
{
cout << "标准输出" << endl; //重定向
cerr << "标准错误输出" << endl; //不能重定向
clog << "标准错误输出" << endl;重定向为文件
// 字符类的处理
char c = 'c';
cout.put(c);
cout.put('\n');
// 字符串输出
cout.write("I love you", 5);// 可以指定长度输出 截取输出
cout.put('\n');
// 输入
//c=cin.get(); // 返回值为输入的值
cout.put(cin.get());
//cout.put(c);
cout.put('\n');
// 字符串输入
//while (getchar() != '\n');// 清空缓冲区
while (cin.get() != '\n');
char str[20] = ""; // 需要结束标记 不然会 烫烫烫
//string st; 不能对字符串类 操作
cin.getline(str, 20);// 无返回值
cout.write(str,20); // 更为安全
cout.put('\n');
}
void testiomanip()
{
// 格式控制字符
//头文件 #include <iomanip>
double pi = 3.1412345;
cout << "设置有效位数:" << setprecision(4)<<pi << endl;
cout << "设置有效小数位数:" <<fixed<< setprecision(2) << pi << endl;
//进制 转换输出
cout << "hex 16 32\t" << hex << 32 << endl;
cout << "oct 8 13\t" << oct << 13 << endl;
cout << "setbase(16) 16 15 \t" << setbase(16)<<15<<endl;
cout << "setbae (2) 3 22 不行 为啥?\t" << setbase(2) << 22<< endl;
// 对齐方式和 输出宽度
cout << setw(6) << 123 << setw(6) << 3456 << setw(6) << 56 << endl;
// 默认 右对齐
// 自己设设置
cout << setiosflags(ios::left) << endl;
cout << setw(6) << 123 << setw(6) << 3456 << setw(6) << 56 << endl;
}
void freopeniostream()
{
freopen("1.txt", "r", stdin);// 把基本输入定向为输入文件
int a, b;
scanf("%d%d", &a, &b);
printf("%d", a + b);
}
int main()
{
//freopeniostream();
testiostream();
testiomanip();
return 0;
}
字符流
-
用的头文件是:sstream类
- istringstream类
- ostringstream类
- 一般用时stringstream类对象即可
-
获取字符流对象中的数据
- string str() //获取string
- void str(const string& str); 重新设置字符流对象的数据
-
一般字符流对象做字符串处理
- 字符串分割
- 字符串转换问题
// 再补