C++的IO流
admin
2024-05-15 05:16:00

目录

C语言的输入与输出

流是什么

C++标准IO流

C语言文件的读写

        二进制的形式读写

        文本形式读写

C++文件IO流

stringstream


C语言的输入与输出

C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf() scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中 printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)

流是什么

        “流”即是流动的意思,C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。 它的特性是:有序连续、具有方向性,为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成某方面的功能。

C++标准IO流

int main()
{int i = 1;double d = 2.22;cout << i; // -> cout.operator<<(i);cout << d; // -> cout.operator<<(d);cout << i << d; // 两个operator<<函数调用printf("%d, %f\n", i, d);//cin >> i;//cin >> d;cin >> i >> d;scanf("%d%f", &i, &d);cout << i << d << endl;printf("%d, %f\n", i, d);//scanf / printf 的缺点是只能支持内置类型// cout<< / cin>> 真正优势是,自己重载以后,自定义类型对象可以是简单实用//Date d;//cin >> d;//cout << d;return 0;
}

C语言文件的读写

首先定义一个结构体(类)

struct ServerInfo
{char _ip[32];int _port;//Date _d;       //自定义类型
};

二进制的形式读写

void TestC_W_Bin()
{ServerInfo info = { "127.0.0.1", 80 };//二进制读写   fwrite/fread//文本读写     fprintf/fscanfFILE* fout = fopen("test.bin", "wb");assert(fout);fwrite(&info, sizeof(info), 1, fout);fclose(fout);
}void TestC_R_Bin()
{FILE* fin = fopen("test.bin", "rb");assert(fin);ServerInfo info;fread(&info, sizeof(info), 1, fin);fclose(fin);printf("%s:%d\n", info._ip, info._port);
}

文本形式读写

void TestC_W_Text()
{FILE* fout = fopen("test.txt", "w");assert(fout);ServerInfo info = { "127.0.0.1", 80 };fprintf(fout, "%s %d", info._ip, info._port);fclose(fout);
}void TestC_R_Text()
{FILE* fin = fopen("test.txt", "r");assert(fin);ServerInfo info;fscanf(fin, "%s%d", info._ip, &info._port);fclose(fin);printf("%s:%d\n", info._ip, info._port);
}

C++文件IO流

1. 定义一个文件流对象 ifstream ififile(只输入用) ofstream ofifile(只输出用) fstream iofifile(既输入又输出用) 2. 使用文件流对象的成员函数打开一个磁盘文件,使得文件流对象和磁盘文件之间建立联系 3. 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写 4. 关闭文件
class ConfigManager
{
public:ConfigManager(const char* filename):_filename(filename){}void WriteBin(const ServerInfo& info){ofstream ofs(_filename.c_str(), ios_base::out | ios_base::binary);ofs.write((const char*)&info, sizeof(ServerInfo));}void ReadBin(ServerInfo& info){ifstream ifs(_filename.c_str(), ios_base::in | ios_base::binary);ifs.read((char*)&info, sizeof(ServerInfo));}void WriteText(ServerInfo& info){ofstream ofs(_filename.c_str());ofs << info._ip << " " << info._port;}void ReadText(ServerInfo& info){ifstream ifs(_filename.c_str());ifs >> info._ip >> info._port;}private:string _filename;
};int main()
{/*TestC_W_Bin();TestC_R_Bin();*//*TestC_W_Text();TestC_R_Text();*//*ServerInfo info = { "127.0.0.1", 80 };ConfigManager cm("config.bin");cm.WriteBin(info);cm.ReadBin(info);cout << info._ip << ":" << info._port << endl;*/ServerInfo winfo = { "127.0.0.1", 80 };ConfigManager cm("config.txt");cm.WriteText(winfo);ServerInfo rinfo;cm.ReadText(rinfo);cout << rinfo._ip << rinfo._port << endl;return 0;
}

stringstream

struct PersonInfo
{string _name;int _age;//...Date _d;
};int main()
{//序列化PersonInfo info = { "张三", 18 };ostringstream oss;oss << info._name << " " << info._age << " ";oss << info._d;string str = oss.str();//反序列化istringstream iss(str);string name;int age;iss >> name >> age;return 0;
}

相关内容

热门资讯

人间绝味沉浸式体验云南过桥米线... 关于云南过桥米线的由来,坊间流传最广的版本与清代一位在蒙自南湖苦读的书生有关。据说,他的妻子每日需走...
瓜州县周边亲子游景点推荐 在忙碌的生活中,与孩子一同出游是增进亲子感情的绝佳方式。瓜州县周边拥有众多风景优美、趣味十足的景点,...
文旅新地标 | 大漠胡杨美景观... 酒泉市阿克塞哈萨克族自治县坝沟胡杨峡 多坝沟胡杨峡景区位于酒泉市阿克塞县阿克旗乡多坝沟村以西3公里...
南县周边亲子游景点推荐 南县周边有众多适合亲子游玩的景点,它们各具特色,能为家长和孩子创造一段温馨且有意义的旅程。在这里,孩...
蜜雪冰城招人,月薪最高2.4万... 近日,在BOSS直聘上,蜜雪冰城上线了一批与“乐园项目”相关的招聘岗位,消息一出,迅速引发网友热议。...