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;
}

相关内容

热门资讯

秋游走起!温州这条精品线路获国... 近日,农业农村部乡村产业发展司专题推介了2025中国美丽乡村休闲旅游(秋季)精品景点线路,温州这条线...
天暖景美!荔波反季节旅游势头强... 央视网消息入冬以来,贵州荔波持续迎来旅游热潮,小七孔景区日均入园人数稳定在1万人左右。荔波县旅游数据...
徐州:彭城七里·且徐行22日启... 漫步彭城七里,穿越千年文脉,在汉文化中感受历史的厚重、邂逅山水美景的灵动,在特色商家中品味地道的徐州...
日旅游业寒流直刺日元命门 近日,日本首相高市早苗的涉台不当言论,引发中国游客大规模取消赴日行程。此举已对日本旅游业造成直接冲击...
雷红娟||那山,那水 那山,那水 雷红娟 “仁者乐山,智者乐水。”我虽称不上仁者、智者,却是一个喜爱游山玩水之人,对于商洛...