目录
IO流使用cout进行输出cout格式化调整字节宽度以及填充字符setf()相关字符串流文件流
C++兼容C,所以C中的输入输出函数依然可以在C++中使用,但是直接把C的那套输入输出搬到C++中肯定无法满足C++的需求。
格式设置完成之后将以对应格式打印,直到格式状态设置为其他的选项为止
cout<<showbase; //设置显示进制前缀
cout << dec << "dec:" << 15 << endl;
cout << oct << "oct:" << 15 << endl;
cout << hex <<"hex:"<< 15 << endl;
另外一种对象设置的方法,了解即可,没上面的方便
cout.setf(ios::showbase); //设置显示进制前缀
cout << "dec" << 15 << endl; //默认10进制
cout.unsetf(ios::dec); //取消10进制 一定要取消
cout.setf(ios::hex); //设置16进制
cout << "hex:" << 15 << endl;
头文件:
#include <iomanip>
const char* str = "sirius";
cout.width(10); //设置宽度
cout << str << endl;
cout.width(10); //设置宽度
cout.fill('*'); //设置填充字符
cout << str << endl;
cout.precision(2); //设置精度
cout << 3.1415 << endl;
输出结果:
sirius
****sirius
3.1
常量 | 含义 |
---|---|
ios_base::boolalpha | 输入输出bool值,可以为ture或false |
ios_base::showbase | 显示前缀0x01 |
ios_base::showpoint | 显示末尾的小数点 |
ios_base::showpos | 在正数前加+ |
参数 | 含义 |
---|---|
ios_base::fixed | (默认)使用定点计数法 |
ios_base::scientific | 使用科学计数法 |
ios_base::left | 使用左对齐 |
ios_base::right | (默认)使用右对齐 |
ios_base::internal | 符号或者基数前缀左对齐,值右对齐 |
头文件
#include <sstream>
#include <iostream>
#include <sstream>
using namespace std;
int main() {
//类型转换
string res = "100";
int num = 0;
stringstream ss;
ss << res;
ss >> num;
cout << num << endl;
//分割字符串+类型转换
string ip = "192.168.0.1";
stringstream ss1(ip);
int a1, a2, a3, a4;
char ch;
ss1 >> a1 >> ch >> a2 >> ch >> a3 >> ch >> a4;
cout << a1 << " " << a2 << " " << a3 << " " << a4 << " " << ch << endl;
//拼接字符串
stringstream ss2;
num = 3;
char str[] = "14159";
ss2 << num << ch << str;
cout << ss2.str() << endl;
return 0;
}
输出:
100
192 168 0 1 .
3.14159
头文件:
#include<fstream>
文件流常用函
描述 | |
---|---|
open | 打开文件 |
is_open | 文件是否被打开 |
close | 关闭文件 |
getline | 读取一行 |
read | 输入(读)到对象 |
write | 输出(写)到文件 |
flush | 将缓冲区的数据写出到文件,再清空它 |
tellg | 输入(读)文件指针位置 |
tellp | 输出(写)文件指针位置 |
seekg | 设置输入(读)文件指针位置 |
seekp | 设置输出(写)文件指针位置 |
eof | 是否到了流尾部 |
C++ 和 C的文件打开模式
C++模式 | C模式 | 描述 |
---|---|---|
ios_base::in | "r" | 打开以读取 |
ios_base::out | "w" | 等价于ios_base::out | ios_base::trunc |
ios_base::out | ios_base::trunc | "w" | 打开以写入,如果已存在,则截断文件 |
ios_base::out | ios_base::app | "a" | 打开以写入,只追加 |
ios_base::out | ios_base::in | "r+" | 打开以读写,在文件允许的位置写入 |
ios_base::out | ios_base::in | ios_base::trunc | "w+" | 打开以读写,如果已存在,则截断文件 |
ios_base::binary | "b" | 以二进制的形式打开 |
截断文件:在文件写入之前擦除掉所有数据
open第三个参数
模式 | 描述 |
---|---|
_SH_DENYRW | 拒绝读写 |
_SH_DENYWR | 拒绝写 |
_SH_DENYRD | 拒绝读 |
_SH_DENYNO | 可读写 |
_SH_SECURE | 安全模式,向前兼容 |
示例程序:
#include<iostream>
#include<fstream>
using namespace std;
struct Student
{
char name[20];
int num;
int age;
char gender;
};
int main()
{
fstream inFile;
ofstream outFile;
Student stu[3] = { {"张三",1001,18,'M'},{ "李四",1002,18,'M' } ,{ "王二",1003,18,'M' } },temp;
outFile.open("test.txt", ios_base::out);
inFile.open("test.txt", ios_base::in);
if (!outFile) {
cerr << "open error!" << endl;
abort();
}
if (!inFile) {
cerr << "write error!" << endl;
abort();
}
for (int i = 0; i < 3; i++)
{
outFile.write((char*)&stu[i], sizeof(Student));
//outFile << "\n"; //插入换行符
}
outFile.close();
for (int i = 0; i < 3; i++)
{
inFile.read((char*)&temp, sizeof(Student));
cout << temp.age << temp.gender << temp.name << temp.num << endl;
}
inFile.close();
cin.get();
return 0;
}
End