1、格式化输入和输出
(1)What
标准库定义了一组操纵符(本质是函数或对象)来修改流的格式状态 当操作符改变流的格式状态时,通常改变后的状态对所有后续 IO 都生效
(2)Which
A.控制布尔值的格式
bool bFlag = true;
std::cout<<std::boolalpha<<bFlag<<std::endl; //打印:true
std::cout<<std::noboolalpha<<bFlag<<std::endl; //打印:1
B.控制整型值进制的格式
cout<<"default:"<<20<<" "<<1024<<endl;
cout<<"octal:"<<oct<<20<<" "<<1024<<endl;
cout<<"hex:"<<hex<<20<<" "<<1024<<endl;
cout<<"decimal:"<<dec<<20<<" "<<1024<<endl;
输出结果:
default:20 1024
octal:24 2000
hex:14 400
decimal:20 1024
C.控制浮点数的格式
// 浮点数格式
double a = 12.123456789;
cout << cout.precision() << endl; // 打印:6 (默认精度为 6)
cout << a << endl; // 打印:12.1235
// 浮点数精度设置——precision
cout.precision(12); cout << a << endl; // 打印:12.123456789
// 是否显式为 0 的小数——showpoint noshowpoint(默认) double b = 12.000000;
cout << b << endl; // 打印:12
cout << std::showpoint << b << endl; // 打印:12.000000
// 科学计数格式——scientific
double c = 123456.123456;
cout << std::scientific << c << endl; // 打印:1.234561234560e+05
2、非格式化输入和输出
(1)What
主要是使用流对象函数实现输入和输出
(2)单字节操作
char ch; while (cin.get(ch))
{
cout.put(ch); }int ch;
while ((ch = cin.get()) != EOF)
{
}
cout.put(ch)
(3)多字节操作
// 输入流对象函数使用:get(char_arr,max_len,delim)
instream.clear();
cout << instream.tellg() << endl; // 打印:247
instream.seekg(0, std::ios::beg); // 设置流的当前指针
cout << instream.tellg() << endl; // 打印:0
const int MAX_LEN = 1000; char wch[MAX_LEN]; // 应该比读取的最大长度要大
instream.get(wch, MAX_LEN, '\0'); // 读取最大长度为 MAX_LEN 的字符
cout << wch << endl; // 打印:所有文本
// 输入流对象函数使用:getline(char_arr,max_len,delim)
instream.clear();
instream.seekg(0, std::ios::beg);
char ch_arr02[MAX_LEN];
instream.getline(ch_arr02, MAX_LEN, '\0');
cout << ch_arr02 << endl;
// 输入流对象函数使用:read (char_arr,max_len)
instream.clear();
instream.seekg(0, std::ios::beg);
char ch_arr03[MAX_LEN];
instream.read(ch_arr03, MAX_LEN / 5);
cout << instream.gcount() << endl; // 打印:200
cout << instream.tellg() << endl; // 打印:208
cout << ch_arr03 << endl;
(4)流的随机访问
instream.clear(); instream.seekg(0, std::ios::beg);
for (int i = 0; i < MAX_LEN; ++i) {instream >> std::noskipws >> ch; if (instream.fail()) break;instream.seekg(i); cout << ch;
}