落实程序设计实习_第1页
落实程序设计实习_第2页
落实程序设计实习_第3页
落实程序设计实习_第4页
落实程序设计实习_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计实习 输入输出流和文件操作 输入输出流 流的概念模型C 中与流操作相关的类及其继承关系输入输出流对象 cin cout cerr clog输出流输入流无格式输入输出流操纵算子流格式状态 输入和输出 计算机 程序 输入 输出 键盘 鼠标 文件 传感器 触摸屏 麦克风 显示器 音箱 文件 打印机 扫描仪 控制器 物理信号 文件 一种物理信号 持续保存程序的数据 状态内存 程序退出后就丢失了文件 程序退出后还存在根据物理信号的载体 文件的保存介质 常见的文件形式有磁带文件光盘文件磁盘文件U盘文件 计算机 程序 文件 文件 物理信号 驱动器 驱动器 信号读设备 信号写设备 为什么要文件 程序退出后 保存数据和状态 下次再执行时 可以恢复程序的运行状态玩家玩游戏累了 休息去明天重新打开计算机 从当前的进度接着玩把一个程序的数据和状态传送给其他的程序出版公司将歌曲制作成MP3文件听众用播放器播放歌曲一个程序的数据太多 状态太复杂而不能保存在内存中时 让程序能够工作北大图书馆有大量的藏书 读者把藏书的目录 读者的借阅记录保存在磁盘上读者甲来借阅图书A时 将甲的信息 A的信息读到内存中处理 流的概念模型 流 设备驱动器与计算机程序之间的接口 可以看作一个无限长的二进制数字序列通过读写指针进行流的读和写 以字节为单位 将流上的数据读进变量x 将y的值写入流 y x 流的概念模型 输出流可以看作一端无限 另一端通过写指针不停地向后写入新内容的单向流 写指针 流的概念模型 输入流可以看作一端无限 另一端通过读指针不停地从流中读取新内容的单向流 读出的内容从流中删去 读指针 有格式读写和无格式读写字符方式 二进制方式读写 有格式读写 以某种数据类型为单位读写例如 读一个整数 写一个浮点数等 无格式读写 以字节为单位读写 不区分其中的内容例如 读20个字节 写50个字节等 缓冲区刷新 向输出流中写数据时 通常是先向缓冲区中写 当缓冲区写满时 才真正向输出流写 也可以通过函数在程序中主动将缓冲区内容写入输出流 C 中与流操作相关的类及其继承关系 ios istream ostream ifstream iostream ofstream fstream 标准流对象 输入流对象 cin与标准输入设备相连输出流对象 cout与标准输出设备相连cerr与标准错误输出设备相连非缓冲输出clog与标准错误输出设备相连缓冲输出 输出流 流插入运算符 cout Goodmorning n 不刷新缓冲区cout Good 不刷新缓冲区cout morning 不刷新缓冲区cout endl 刷新缓冲区cout flush 刷新缓冲区 输出流 用成员函数put输出字符cout put A put的连续使用cout put A put a 输入流 读取运算的返回值重载 运算符的定义 istream 返回的是输入流的引用 引用本身是地址 在读取不成功时 该地址被置成0 输入流 成员函数cin get 读入一个字符 包括空白字符 返回该字符 cin get char buffer intsize chardelim n 或者读size 1个字符入buffer 或者遇到 n 在buffer最后加 0 分隔符留在输入流 cin getline char buffer intsize chardelim n 或者读size 1个字符入buffer 或者遇到 n 在buffer最后加 0 分隔符从流去掉 cin eof 返回输入是否结束标志 输入流 其它函数cin peek 返回下一个字符 但不从流中去掉 putback charch 将字符ch放回输入流ignore intnCount 1 intdelim EOF 从流中删掉最多nCount个字符 遇到EOF时结束 无格式输入输出 用read write进行指定字节数的输入输出constintSIZE 80 charbuffer SIZE cin read buffer 20 cout write buffer cin gcount gcount返回上次读入的字节数cout endl 输入 Usingtheread writeandgcountmemberfunctions输出 Usingtheread write 流操纵算子 整数流的基数 流操纵算子dec oct hex setbase浮点数的精度 precision setprecision 设置域宽 setw width 用户自定义的流操纵算子使用流操纵算子需要 include 流操纵算子 整数流的基数 流操纵算子dec oct hexintn 10 cout n endl cout hex n n dec n n oct n endl 输出结果 10a1012 控制浮点数精度的流操纵算子 precision setprecisionprecision是成员函数 其调用方式为 cout precision 5 setprecision是流操作算子 其调用方式为 cout setprecision 5 可以连续输出它们的功能相同 指定输出浮点数的有效位数 浮点数输出最多6位有效数字 include includeusingnamespacestd intmain doublex 1234567 89 y 12 34567 intn 1234567 intm 12 cout setprecision 6 x endl y endl n endl m 控制浮点数精度的流操纵算子 输出 1 23457e 00612 3457123456712 以小数点位置固定的方式输出 include includeusingnamespacestd intmain doublex 1234567 89 y 12 34567 intn 1234567 intm 12 cout setiosflags ios fixed setprecision 6 x endl y endl n endl m 控制浮点数精度的流操纵算子 输出 1234567 89000012 345670123456712 取消以小数点位置固定的方式输出 include includeusingnamespacestd intmain doublex 1234567 89 cout setiosflags ios fixed setprecision 6 x endl resetiosflags ios fixed x 控制浮点数精度的流操纵算子 输出 1234567 8900001 23457e 006 设置域宽的流操纵算子 设置域宽 setw width 两者功能相同 一个是成员函数 另一个是流操作算子 调用方式不同 cin setw 5 或者cin width 5 cout setw 5 或者cout width 5 设置域宽的流操纵算子 设置域宽 setw width 例 intw 4 输入 1234567890charstring 10 输出 1234cin width 5 5678while cin string 90cout width w cout string endl cin width 5 设置域宽的流操纵算子 设置域宽 setw width 需要注意的是在每次读入和输出之前都要设置宽度 例如 charstr 10 输入 1234567890cin width 5 输出 1234cin string 567890cout string cout string endl 设置域宽的流操纵算子 设置域宽 setw width 需要注意的是在每次读入和输出之前都要设置宽度 例如 charstr 10 输入 1234567890cin width 5 输出 1234cin string 5678cout string cout string endl 用户自定义流操纵算子 ostream输出 aabb为什么可以 用户自定义流操纵算子 因为iostream里对 进行了重载 成员函数 ostream 文件操作 数据的层次文件和流建立顺序文件文件的读写指针有格式读写无格式读写 数据的层次 位bit字节byte域 记录例如 学生记录intID charname 10 intage intrank 10 我们将所有记录顺序地写入一个文件 称为顺序文件 文件和流 可以将顺序文件看作一个有限字符构成的顺序字符流 然后象对cin cout一样的读写 回顾一下输入输出流类的结构层次 ios istream ostream ifstream iostream ofstream fstream 建立顺序文件 include 包含头文件ofstreamoutFile clients dat ios out ios binary 打开文件ofstream是fstream中定义的类outFile是我们定义的ofstream类的对象 clients dat 是将要建立的文件的文件名ios out是打开并建立文件的选项ios out输出到文件 删除原有内容ios app输出到文件 保留原有内容 总是在尾部添加ios ate输出到文件 保留原有内容 可以在文件任意位置添加ios binary以二进制文件格式打开文件 建立顺序文件 也可以先创建ofstream对象 再用open函数打开ofstreamfout fout open test out ios out ios binary 判断打开是否成功 if fout cerr Fileopenerror endl 文件的读写指针 对于输入文件 有一个读指针 对于输出文件 有一个写指针 对于输入输出文件 有一个读写指针 标识文件操作的当前位置 该指针在哪里 读写操作就在哪里进行 文件的读写指针 ofstreamfout a1 out ios ate longlocation fout tellp 取得写指针的位置location 10L fout seekp location 将写指针移动到第10个字节处fout seekp location ios beg 从头数locationfout seekp location ios cur 从当前位置数locationfout seekp location ios end 从尾部数locationlocation可以为负值 文件的读写指针 ifstreamfin a1 in ios ate longlocation fin tellg 取得读指针的位置location 10L fin seekg location 将读指针移动到第10个字节处fin seekg location ios beg 从头数locationfin seekg location ios cur 从当前位置数locationfin seekg location ios end 从尾部数locationlocation可以为负值 字符文件读写 因为文件流也是流 所以前面讲过的流的成员函数和流操作算子也同样适用于文件流 写一个程序 将文件in txt里面的整数排序后 输出到out txt例如 若in txt的内容为 12349456879则执行本程序后 生成的out txt的内容为 16945234879 include include includeusingnamespacestd intaNumbers 10000 intMyCompare constvoid p1 constvoid p2 return int p1 int p2 intmain inti 0 ifstreamsrcFile in txt ios in ofstreamdestFile out txt ios out while srcFile aNumbers i i qsort aNumbers i sizeof int MyCompare for intj 0 j i j destFile aNumbers j destFile close srcFile close 参考程序 二进制文件读写 intx 10 fout seekp 20 ios beg fout write constchar 二进制文件读写 直接写二进制数据 记事本看未必正确 二进制文件读写 下面的程序从键盘输入几个学生的姓名的成绩 并以二进制 文件形式存起来 include includeusingnamespacestd classCStudent public charszName 20 intnScore intmain CStudents ofstreamOutFile c tmp students dat ios out ios binary while cin s szName s nScore if stricmp s szName exit 0 名字为exit则结束break OutFile write char 输入 Tom60Jack80Jane40exit0则形成的students dat为72字节 用记事本打开 呈现 Tom烫烫烫烫烫烫烫烫 Jack烫烫烫烫烫烫烫蘌Jane烫烫烫烫烫烫烫 二进制文件读写 下面的程序将students dat文件的内容读出并显示 include includeusingnamespacestd classCStudent public charszName 20 intnScore intmain CStudents ifstreamInFile c tmp students dat ios in if InFile cout error endl return0 while InFile read char 输出 Tom60Jack80Jane40 二进制文件读写 下面的程序将students dat文件的Jane的名字改成Mike include includeusingnamespacestd classCStudent public charszName 20 intnScore 输出 Tom60Jack80Mike40 intmain CStudents fstreamiofile c tmp students dat ios in ios out if iofile cout error return0 iofile seekg 2 sizeof s ios beg 定位写指针到第三个记录iofile write Mike strlen Mike iofile seekp 0 ios beg 定位读指针到开头while iofile read char 显式关闭文件 ifstreamfin test dat ios in fin close ofstreamfout test dat ios out fout close 命令行参数 启动程序运行时可以指定命令行参数方式一开始 运行 输入cmd 按确定 dos窗口可以用cd切换当前目录 cd子目录等等来到程序所在目录 启动程序 myprogramarg1arg2或者在任意目录下 启动程序 e me aaarg1arg2绝对路径和相对路经的概念方式二在vc编程环境中 project settings debug programarguments 命令行参数 intmain intargc char argv cout argc endl for inti 0 i argc i cout argv i endl return0 第一个参数为命令本身 第二个以后为参数 命令行参数 若上面程序可执行文件名为sampl exe 则在命令行输入 smaplefile1a txts输出结果为4tmp exe vtest txt2 例子 mycopy程序 文件拷贝 用法示例 mycopysrc datdest dat即将src dat拷贝到dest dat如果dest dat原来就有 则原来的文件会被覆盖 include includeusingnamespacestd intmain intargc char argv if argc 3 cout Filenamemissing endl return0 ifstreaminFile argv 1 ios bi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论