Standard C++ Episode 7

六、C++的I/O流库
C:fopen/fclose/fread/fwrite/fprintf/fscanf/fseek/ftell...

C++:对基本的I/O操作做了类的封装,其功能没有任何差别,用法和C的I/O流也非常近似。

 

 

七、格式化I/O

<</>>

 1 /*
 2  *格式化I/O练习
 3  */
 4 #include <iostream>
 5 #include <fstream>
 6 using namespace std;
 7 int main (void) {
 8     ofstream ofs ("format.txt");
 9     if (! ofs) {
10         perror ("打开文件失败");
11         return -1;
12     }
13     ofs << 1234 << ' ' << 56.78 << ' ' << "linux"
14         << '\n';
15     ofs.close ();
16     ofs.open ("format.txt", ios::app);
17     if (! ofs) {
18         perror ("打开文件失败");
19         return -1;
20     }
21     ofs << "append_a_line\n";
22     ofs.close ();
23     ifstream ifs ("format.txt");
24     if (! ifs) {
25         perror ("打开文件失败");
26         return -1;
27     }
28     int i;
29     double d;
30     string s1, s2;
31     ifs >> i >> d >> s1 >> s2;
32     cout << i << ' ' << d << ' ' << s1 << ' '
33         << s2 << endl;
34     ifs.close ();
35     return 0;
36 }

 

 

八、非格式化I/O

put/get

 1 /*
 2  *非格式化的I/O练习
 3  */
 4 #include <iostream>
 5 #include <fstream>
 6 using namespace std;
 7 int main (void) {
 8     ofstream ofs ("putget.txt");
 9     if (! ofs) {
10         perror ("打开文件失败");
11         return -1;
12     }
13     for (char c = ' '; c <= '~'; ++c)
14         if (! ofs.put (c)) {
15             perror ("写入文件失败");
16             return -1;
17         }
18     ofs.close ();
19     ifstream ifs ("putget.txt");
20     if (! ifs) {
21         perror ("打开文件失败");
22         return -1;
23     }
24     char c;
25     while ((c = ifs.get ()) != EOF)
26         cout << c;
27     cout << endl;
28     if (! ifs.eof ()) {
29         perror ("读取文件失败");
30         return -1;
31     }
32     ifs.close ();
33     return 0;
34 }

 

 

九、随机I/O
seekp/seekg

tellp/tellg

 1 /*
 2  * seekp/seekg练习
 3  * tellp/tellg练习
 4  * */
 5 #include <iostream>
 6 #include <fstream>
 7 using namespace std;
 8 int main (void) {
 9     fstream fs ("seek.txt", ios::in | ios::out);
10     if (! fs) {
11         perror ("打开文件失败");
12         return -1;
13     }
14     fs << "0123456789";
15     cout << fs.tellp () << endl;//tellp返回当前put操作位置
16     cout << fs.tellg () << endl;//tellg返回当前get操作位置
17     fs.seekp (-3, ios::cur);
18     fs << "XYZ";
19     fs.seekg (4, ios::beg);
20     int i;
21     fs >> i;
22     cout << i << endl;
23     cout << fs.tellg () << endl;
24     cout << fs.tellp () << endl;
25     fs.seekg (-6, ios::end);
26     fs << "ABC";
27     fs.close ();
28     return 0;
29 }

 

 

 

十、二进制I/O

read/write

 1 /*
 2  *read/write练习
 3  */
 4 #include <iostream>
 5 #include <fstream>
 6 #include <cstring>
 7 using namespace std;
 8 class Dog {
 9 public:
10     Dog (const string& name = "", int age = 0) :
11         m_age (age) {
12         strcpy (m_name, name.c_str ());
13     }
14     void print (void) const {
15         cout << m_name << "" << m_age << endl;
16     }
17 private:
18     char m_name[128];
19     int m_age;
20 };
21 int main (void) {
22     ofstream ofs ("dog.dat");
23     Dog dog ("小白", 25);
24     ofs.write ((char*)&dog, sizeof (dog));
25     ofs.close ();
26     ifstream ifs ("dog.dat");
27     Dog dog2;
28     ifs.read ((char*)&dog2, sizeof (dog2));
29     dog2.print ();
30     ifs.close ();
31     return 0;
32 }

 

 

 1 /*
 2  * 使用按位异或对文件加密和解密
 3  * */
 4 #include <iostream>
 5 #include <fstream>
 6 #include <stdexcept>
 7 #include <cstdlib>
 8 using namespace std;
 9 #define BUFSIZE (1024*10)
10 int _xor (const char* src, const char* dst,
11     unsigned char key) {
12     ifstream ifs (src, ios::binary);
13     if (! ifs) {
14         perror ("打开源文件失败");
15         return -1;
16     }
17     ofstream ofs (dst, ios::binary);
18     if (! ofs) {
19         perror ("打开目标文件失败");
20         return -1;
21     }
22     char* buf = NULL;
23     try {
24         buf = new char[BUFSIZE];
25     }
26     catch (bad_alloc& ex) {
27         cout << ex.what () << endl;
28         return -1;
29     }
30     while (ifs.read (buf, BUFSIZE)) {
31         for (size_t i = 0; i < BUFSIZE; ++i)
32             buf[i] ^= key;
33         if (! ofs.write (buf, BUFSIZE)) {
34             perror ("写入文件失败");
35             return -1;
36         }
37     }
38     if (! ifs.eof ()) {
39         perror ("读取文件失败");
40         return -1;
41     }
42     for (size_t i = 0; i < ifs.gcount (); ++i)
43         buf[i] ^= key;
44     if (! ofs.write (buf, ifs.gcount ())) {
45         perror ("写入文件失败");
46         return -1;
47     }
48     delete[] buf;
49     ofs.close ();
50     ifs.close ();
51     return 0;
52 }
53 int enc (const char* plain, const char* cipher) {
54     srand (time (NULL));
55     unsigned char key = rand () % 256;
56     if (_xor (plain, cipher, key) == -1)
57         return -1;
58     cout << "密钥:" << (unsigned int)key << endl;
59     return 0;
60 }
61 int dec (const char* cipher, const char* plain,
62     unsigned char key) {
63     return _xor (cipher, plain, key);
64 }
65 int main (int argc, char* argv[]) {
66     if (argc < 3) {
67         cerr << "用法:" << argv[0]
68             << " <明文文件> <密文文件>" << endl;
69         cerr << "用法:" << argv[0]
70             << " <密文文件> <明文文件> <密钥>"
71             << endl;
72         return -1;
73     }
74     if (argc < 4)
75         return enc (argv[1], argv[2]);
76     else
77         return dec (argv[1], argv[2],
78             atoi (argv[3]));
79     return 0;
80 }

 

 

 

十一、格式控制
in a;
printf ("%d%x\n", a, a)
cout << a << endl;
流函数,例如cout.precision(10)
流控制符,流控制符是对象,例如setprecision(10)。使用流控制符需要include <iomanip>
cout << hex << a;
cout << setw (10) << a;

 1 /*
 2  *格式控制练习
 3  */
 4 #include <iostream>
 5 #include <iomanip>
 6 #include <cmath>
 7 #include <fstream>
 8 #include <sstream>
 9 using namespace std;
10 int main (void) {
11     cout << sqrt (2) << endl;
12     cout.precision (10); // 10位有效数字
13     cout << sqrt (2) << endl;
14     cout << sqrt (2) * 100 << endl;
15     cout << setprecision (5) << sqrt (2) << endl
16         << sqrt (2) * 100 << endl;
17     cout << "当前精度:" << cout.precision ()
18         << endl;
19     cout << setprecision (2) << 1.24 << ' ' << 1.25
20         << ' ' << 1.26 << endl;
21     cout << showbase << hex << 127 << endl;
22     cout << oct << 127 << endl;
23     cout << dec << 127 << endl;
24     cout << noshowbase << hex << 127 << dec << endl;
25     cout << setw (12) << 127 << 721 << endl;
26     cout << setfill ('$') << left << setw (12)
27         << 127 << endl;
28     cout.precision (10);
29     cout.setf (ios::scientific);
30     cout << sqrt (2) << endl;
31     cout.setf (ios::fixed);
32     cout << sqrt (2) << endl;
33     cout << 12.00 << endl;
34     cout << showpoint << 12.00 << endl;
35     cout << noshowpoint << 12.00 << endl;
36     ifstream ifs ("stream.txt");
37     ifs.unsetf (ios::skipws);
38     char c;
39     while (ifs >> c)
40         cout << c;
41     ifs.setf (ios::skipws);
42     ifs.clear (); // 复位
43     ifs.seekg (ios::beg);
44     while (ifs >> c)
45         cout << c;
46     ifs.close ();
47     cout << endl;
48     int i = 1234;
49     double d = 56.78;
50     string s = "tarena";
51     ostringstream oss;
52     oss << i << ' ' << d << ' ' << s;
53     string str = oss.str ();
54     cout << str << endl;
55     str = "hello 3.14 pai";
56     istringstream iss;
57     iss.str (str);
58     iss >> s >> d >> str;
59     cout << s << ' ' << d << ' ' << str << endl;
60     return 0;
61 }

 

转载于:https://www.cnblogs.com/libig/p/4746707.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Android设备与Mac电脑之间传输文件

不同于Windows和Linux&#xff0c;Android设备连接到Mac电脑上是看不见挂载的目录的&#xff0c;既然看不到了Android设备的挂载目录&#xff0c;如何在Android设备与Mac电脑之间传输文件呢&#xff1f; 原来Android官方提供了传输文件的工具&#xff01;访问www.android.com/f…

jqPlot图表插件学习之折线图-散点图-series属性

一、准备工作 首先我们需要到官网下载所需的文件&#xff1a; 官网下载&#xff08;笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本&#xff09; 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载对应的js和css&#xff08;因为笔者在VS2012环境下新建的&…

CUDA 6.5 VS2013 Win7:创建CUDA项目

运行环境&#xff1a; Win7VS2013CUDA6.5 1.创建win32空项目 2.右键项目解决方案-->生成项目依赖项-->生成自定义 3.右键项目解决方案-->属性-->配置属性-->常规-->平台工具集 配置属性-->VC目录-->包含目录&#xff0c;添加 $(CUDA_INC_PATH) 连接器-…

MVC,MVP 和 MVVM 的图示

复杂的软件必须有清晰合理的架构&#xff0c;否则无法开发和维护。 MVC&#xff08;Model-View-Controller&#xff09;是最常见的软件架构之一&#xff0c;业界有着广泛应用。它本身很容易理解&#xff0c;但是要讲清楚&#xff0c;它与衍生的 MVP 和 MVVM 架构的区别就不容易…

(Android Studio)添加文本框

此文大部分摘自http://hukai.me/android-training-course-in-chinese/basics/firstapp/building-ui.html android : id 这是定义View的唯一标识符。可以在程序代码中通过该标识符对对象进行引用&#xff0c;例如对这个对象进行读和修改的操作(在下一课里将会用到)。 当想从XML里…

听GPT 讲Rust源代码--src/tools(24)

File: rust/src/tools/clippy/clippy_lints/src/types/borrowed_box.rs 在Rust源代码中的rust/src/tools/clippy/clippy_lints/src/types/borrowed_box.rs文件是Clippy项目的一个规则&#xff0c;用于检查可能是误用或错误的Box引用情况。 Rust中的Box是一个堆分配的值的所有权…

【转】漫谈ANN(2):BP神经网络

上一次我们讲了M-P模型&#xff0c;它实际上就是对单个神经元的一种建模&#xff0c;还不足以模拟人脑神经系统的功能。由这些人工神经元构建出来的网络&#xff0c;才能够具有学习、联想、记忆和模式识别的能力。BP网络就是一种简单的人工神经网络。我们的第二话就从BP神经网络…

笑男手札:SharePoint 2013 单一服务器场环境恢复数据库内容

SharePoint 2013 单一服务器场环境恢复数据库内容 笑男的公司服务很多客户&#xff0c;当然&#xff0c;这些客户都很挑剔&#xff0c;所以一般情况下生产&#xff08;Prod&#xff09;环境的服务是不能停的。 当然&#xff0c;如果你将包含相同网站集的数据库连接到同一个服务…

图解 深入浅出 JavaWeb:Servlet 再说几句

Writer &#xff1a;BYSocket&#xff08;泥沙砖瓦浆木匠&#xff09; 微 博&#xff1a;BYSocket 豆 瓣&#xff1a;BYSocket FaceBook&#xff1a;BYSocket Twitter &#xff1a;BYSocket 上一篇的《 Servlet必会必知 》受到大家一致好评 — (感谢 读…

!+\v1 用来“判断浏览器类型”还是用来“IE判断版本”的问题!

这种写法是利用各浏览器对转义字符"\v"的理解不同来判断浏览器类型。在IE中&#xff0c;"\v"没有转义&#xff0c;得到的结果为"v"。而在其他浏览器中"\v"表示一个垂直制表符&#xff0c;所以ie解析的"\v1" 为 "v1&quo…

这么多个月,我头一次体验用类的概念来写驱动

原来感觉一样是那么爽阿。。。快乐得不得了。。。转载于:https://www.cnblogs.com/suanguade/p/4038190.html

$ npm install opencv ? 你试试?! 在windows环境下,使用node.js调用opencv攻略

博主之前写过一篇文章《html5与EmguCV前后端实现——人脸识别篇》&#xff0c;叙述的是opencv和C#的故事。最近在公司服务器上更新了一套nodejs环境&#xff0c;早就听闻npm上有opencv模块&#xff0c;便欲部署之。然而opencv的部署似乎从来都不会那么顺利...... 找模块上https…

Win7安装vs2010失败

提示&#xff1a; --------------------------------------------------------------------------------------------------------------------------------------- 解决方法&#xff1a;开始运行中regedit打开注册表找到HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control …

调光设备术语:调光曲线(转)

源&#xff1a;调光设备术语&#xff1a;调光曲线 核心提示&#xff1a;调光曲线是调光设备重要的参数之一&#xff0c;它直接影响到了灯光输出的效果&#xff0c;是数字化调光设备性能的体现。上面这句话包含了三点内容&#xff0c;我们逐条解析。 调光曲线是调光设备重要的参…

TCP/IP三次握手与四次握手

原文地址 http://blog.csdn.net/whuslei/article/details/6667471 http://blog.csdn.net/wo2niliye/article/details/48447933 建立TCP需要三次握手才能建立&#xff0c;而断开连接则需要四次握手。整个过程如下图所示&#xff1a; 先来看看如何建立连接的。 首先Client端发送连…

vim支持nginx语法高亮

下载nginx源码&#xff0c;解压之后&#xff0c;将contribu/vim/*拷贝到~/.vim/目录&#xff0c;如果没有~/.vim/目录&#xff0c;则创建即可。 cp -r contrib/vim/* ~/.vim/或 mkdir -p ~/.vim/ cp -r contrib/vim/* ~/.vim/此时再打开conf/nginx.conf就可以看到已经语法高亮…

C语言操作mysql

php中 mysqli, pdo 可以用 mysqlnd 或 libmysqlclient 实现 前者 从 php 5.3.0起已内置到php中, 并且支持更多的特性&#xff0c;推荐用 mysqlnd mysqlnd &#xff0c; libmysqlclient 对比&#xff1a;http://php.net/manual/en/mysqlinfo.library.choosing.php mysqlnd 目前是…

每日温度

根据每日 气温 列表&#xff0c;请重新生成一个列表&#xff0c;对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列表 temperatures [73, 74, 75, 71, 69, 72, 76, 73]&#xf…

什么是Modbus

什么是Modbus 1. Modbus如何工作 Modbus是通过设备之间的几根连线来传递数据&#xff0c;最简单的设置就是主站和从站之间用一跟串口线相连。数据通过一串0或者1来传递&#xff0c;也就是位。0为正电压&#xff0c;1为负电压。位数据传递速度非常快&#xff0c;常见的传输速度为…

Android实例-拍摄和分享照片、分享文本(XE8+小米2)

结果&#xff1a; 1.分享文本不好使&#xff0c;原因不明。有大神了解的&#xff0c;请M我&#xff0c;在此十分感谢。 2.如果想支持图片编辑&#xff0c;将Action事件的Editable改为True。 相关资料&#xff1a; 官网地址&#xff1a;http://docwiki.embarcadero.com/RADStudi…