实验9 I/O流(P293)

2023-10-31

实验目的和要求

1.掌握格式化的输入输出方法。

2.熟悉系统提供的输入操作函数。

3.掌握磁盘文件的输入输出方法。

实验内容

1.程序sy9_1.cpp用以打印表中的数据,但程序中存在逻辑错误。上机调试后写出正确的代码。

原程序如下:

//sy9_1.cpp
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    cout<<setw(10)<<n[0][0]<<n[0][1]<<n[0][2]
    <<endl<<n[1][0]<<n[1][1]<<n[1][2]
    <<endl<<n[2][0]<<n[2][1]<<n[2][2]<<endl;
    return 0;
}

修改后的程序如下:

//sy9_1.cpp
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    cout<<setw(10)<<n[0][0]<<n[0][1]<<n[0][2]
    <<setw(10)<<endl<<n[1][0]<<n[1][1]<<n[1][2]
    <<setw(10)<<endl<<n[2][0]<<n[2][1]<<n[2][2]<<endl;
    return 0;
}
程序输出结果如下:


2.编程实现下面要求:(sy9_2.cpp)

以左对齐方式输出整数40000,域宽为15。

打印有符号数和无符号数100。

将十进制整数100以0x开头的十六进制格式输出。

用前导*格式打印1.234,域宽为10。

编写程序如下:

//sy9_2.cpp
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double a=40000;
    cout<<setiosflags(ios_base::left)<<setw(15)<<a<<endl;
    cout<<showpos<<100<<"\t"<<100u<<endl;
    cout.setf(ios::showbase);
    cout<<"以0x开头的十六进制输出100:";
    cout.setf(ios::hex,ios::basefield);
    cout<<100<<endl;
    cout<<noshowpos<<right<<setfill('*')<<setw(10)<<1.234<<endl;
    return 0;
}

程序 输出结果如下:


3.建立某班同学通讯录二进制文件,文件中的每个记录包括姓名、电话号码、QQ号、E-mail和家庭住址。(sy9_3.cpp)

代码如下:

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
static int n=0;
class MYtel
{
    public:
        void getdata()
        {
            cin>>name>>number>>QQnum>>E>>add;
        }
        void disp()
        {
            cout<<"姓名\t\t电话号码\tQQ号码\t\tE-mail\t\t家庭住址"<<endl;
        }
    private:
         char name[12];
         char number[11];
         char QQnum[11];
         char E[10];
         char add[100];

};
void fun1()
{
    ofstream output("phone.dat",ios::binary);
     if(!output)
    {
        cout<<"File cannot be opened."<<endl;
        return ;
    }
    MYtel s;
    cout<<"输入学生人数:";
    cin>>n;
    cout<<"姓名\t\t电话号码\tQQ号码\t\tE-mail\t\t家庭住址"<<endl;
    for(int i=0;i<n;i++)
    {
        s.getdata();
        output.write((char *)&s,sizeof(s));
    }
    output.close();
}
void fun2()
{
    ifstream input("phone.data",ios::binary);
    MYtel s;
     cout<<"所有学生的信息为:"<<endl;
     cout<<"姓名\t\t电话号码\tQQ号码\t\tE-mail\t\t家庭住址"<<endl;
     input.read((char *)&s,sizeof(s));
     while(input)
     {
         s.disp();
         input.read((char *)&s,sizeof(s));
     }
    input.close();
}

int main()
{
    int sel;
    while(1)
    {
         cout<<"********************通讯录系统*******************";
         cout<<endl<<endl;
         cout<<"1:输入数据       2.输出数据   0.退出"<<endl;
         cout<<"**************************************************";
         cout<<"\n请选择(0-3)";
         cin>>sel;
         switch(sel)
         {
             case 1:fun1(); break;
             case 2:fun2(); break;
             case 0:exit(1);
         }
    }
    return 0;
}

4.从键盘上输入学生的QQ号,在由第3题所建立的通讯录文件中查找该同学的资料。查找成功时,显示其所有通讯录信息。(sy9_4.cpp)

代码如下:

分析与讨论

1.结合实验内容中第1题和第2题,说明格式化的输入输出方法和应注意的问题。

答:C++的I/O流库提供了两种控制格式的输入输出的方法:一种是iOS类的成员函数,另一种是使用控制符;

在iOS类中有几个成员函数可用来对输入输出的格式控制,这些成员函数通过对格式标志字、域宽、填充符及输出精度的设定来控制输入输出的格式,使其后的输入输出操作按设定的格式进行;C++的I/O流类库中又提供一种使用控制符进行格式化输出的方法,这些控制符与成员函数调用的效果一样,它们可以直接插入到流中,而不必再单独调用,也可直接被插入符或提取符操作。但控制符中没有的功能还需使用成员函数的方法来提供。这些控制符是一些特殊的函数,其中所有不带形式参数的函数是在头文件iostream.h中定义的,而所有带形式参数的函数定义则定义在iomanip.h中,如第1题中的set(10)和第2题中的set(10)就是在iomanip.h中定义的。

应注意的问题:数据输出宽度在默认情况下为表示该数据所需的最少字符数;如果所设置的数据宽度小于数据所需的最少字符数,则数据宽度按默认宽度处理。

2.结合实验内容中第3题和第4题,说明磁盘文件的输入输出方法。

答:按数据的存储形式来分类,文件可分为文本文件和二进制文件。按数据的存取方式来分类,文件可分为顺序文件和随机读取文件。

文件的打开和关闭方法:

打开文件就是使一个文件流对象与一个指定的文件相关联。对象名.open(文件名,方式);

文件在打开后可进行读写操作,在读写操作完成后应将其关闭,就是使打开的文件与流对象“脱钩”。

<流对象名>.close();

实验总结

  在本次实验中我学会了格式化的输入输出方法,知道怎样去设置输出格式的对齐方式,输出的数据宽度,填充字符和输出精度等;还知道了所有不带形式参数的函数是在头文件iostream.h中定义的,而所有带形式参数的函数定义则定义在iomanip.h中。比如说cout.fill(‘*’)这样的定义只能在头文件iostream.h中定义,而setfill(‘*’)这种定义必须在头文件iomanip.h。在第1题中我学会了setw()的使用方法,setw就是width(宽度)的设置,后面跟的整型数字就是宽度。除此之外我还学会了各种进制之间转换的输出方法。通过第3和第4题的还学会了二进制文件的输入输出方法。总之通过通过对理论知识和实践操作的结合,在这次实验中我收获很大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实验9 I/O流(P293) 的相关文章

  • 在 ROS 中使用 Protobuf 替代 ros msg

    转自 https segmentfault com a 1190000012734275 Background 做 ROS 相关开发的 应该都知道 ros msg 有个非常大的槽点 ros msg 扩展性较差 即如果 msg 的字段发生变化
  • JAVA 输出一个会动的爱心

    以下是 Java 代码 可以在控制台输出一个会动的爱心 public class Love public static void main String args throws InterruptedException while true
  • 看完百度文心一言的魔性作图,我头都笑掉了...

    近日看到网友们用百度文心一言来作图 看了后我都愣住了 1 AI 作画 车水马龙 2 AI 作画 驴肉火烧 3 AI 作画 唐伯虎点秋香 4 AI 作画 鱼香肉丝 5 AI 作画 胸有成竹 6 AI 作画 夫妻肺片 7 AI 作画 红烧狮子头
  • 【GUI】Python图形界面(一)

    Python图形界面 一 第一个界面 1 了解模块代码的组成 导入库 PySimpleGUI 定义布局 确定行数 创建窗口 事件循环 关闭窗口 1 导入库 import PySimpleGUI as sg 2 定义布局 确定行数 layou
  • SharePreference原理

    SharedPreferences是Android提供的数据持久化的一种手段 适合单进程 小批量的数据存储与访问 因为SharedPreferences的实现是基于单个xml文件实现的 并且 所有持久化数据都是一次性加载到内存 如果数据过大
  • Error Handling with C++ Exceptions, Part 1

    by Chuck Allison Error Handling Alternatives With the traditional programming languages of yore a developer s alternativ
  • 电流电压曲线 vc源码_如何真正理解三极管伏安特性曲线在饱和区的含义

    初次学习三极管工作原理的时候 往往会对三极管的伏安特性曲线非常困惑 特别是饱和区的性质 本文就讨论这方面的内容 三极管的工作电路如图所示 图一 三极管工作电路 按照上述电路得出三极管的伏安特性如图所示 教科书中一般都这样描述三极管的三个工作
  • 快排算法实现

    找到分区点 把数组元素放到分区点两侧 再对分区点两侧数组进行排序 完成快排 同样递归实现快排 递归公式 递归终止条件 当所分区只有一个元素是 即元素下标相同时 递归终止 并返回 快排实现目的 对数组进行排序 实现过程 传递一个数组和数组起始
  • wangEditor富文本编辑器图片/视频上传

    wangEditor 有丰富的 API 和足够的扩展性 允许我们自定义开发菜单 模块 插件等 在Vue React中运用也很方便 因此本文介绍下vue中富文本上传图片和视频 安装引入后富文本有显示上传图片按钮 点击上传后会报没有配置上传地址
  • 14. TypeScript 自定义类型

    TypeScript 自定义类型 1 Diff实现 求两个对象不同的部分 let person1 name 123 age 11 address 456 let person2 address 123 type Diff

随机推荐

  • 基于Python+Pytest+Selenium的自动化测试之PO模式简介

    在实际的软件研发过程中 往往会存在项目时间紧张 待测工作量大 待测的功能点较多 但是团队测试人员有限 难以全部测试覆盖的问题 针对问题 我们可以通过自动化测试去解决一些测试工作中遇到的实际问题 把一些工作写成代码 交给机器去处理和执行 解放
  • java中常见的异常及处理方法

    1 java lang nullpointerexception 这个异常大家肯定都经常遇到 异常的解释是 程序遇上了空指针 简单地说就是调用了未经初始化的对象或者是不存在的对象 这个错误经常出现在创建图片 调用数组这些操作中 比如图片未经
  • Ajax基本案例详解之load的实现

    Ajax的load实现 看这篇之前建议大家去看看前面两篇文章 1 Ajax基本案例详解之 ajax的实现 2 Ajax基本案例详解之 get的实现 现在写一下 load 里面的主要内容 semail load doindex jsp ema
  • git恢复修改的文件

    文件修改后想反悔 三种情况 1 未进行任何操作 仅仅修改了文件 2 执行了git add将文件推到了暂存区 3 执行了git commit将文件推到了本地仓库 处理方法 针对情况1 只需要执行git checkout 文件名 情况2 首先g
  • linux常用命令汇总

    内存 cpu查看 free h 以合适内存单位显示内存情况 free s 数字 每几秒刷新内存显示 top 按e切换显示单位 防火墙 centos7 查看防火墙状态 firewall cmd state 停止firewall systemc
  • 服务器无法加载海康sdk依赖的问题

    首先遇到的jna jar和examples jar无法加载的问题 尝试了很多方法无效 以下方法实测有效 其次是动态链接库无法加载的问题 而且是播放库 我的方法比较简单 netsdk加载出来就行了 播放库用不到 删掉引用就行了 最后 我尝试了
  • Android程序员必备!Android学习笔记在互联网上火了,成功定级腾讯T3-2

    前言 2020年是转折的一年 上半年疫情原因 很多学android开发的小伙伴失业了 虽找到了一份工作 但高不成低不就 下半年金九银十有想法更换一份工作 很多需要大厂面试经验和大厂面试真题的小伙伴 想提前准备刷下题 接下来分享一份我的字节跳
  • 财务风险管理的内容

    财务风险管理的内容 一 筹资风险管理 筹资风险来源于两个方面 一是偿债风险 由于借入资金严格规定了借款方式 还款期限和还款金额 如果企业负债较多 而经营管理和现金管理不善 可能导致企业不能按期还本付息 就会产生偿债风险 偿债风险如不能通过财
  • nginx:accept() failed (24: Too many open files)解决方法

    有一台服务器访问量非常高 使用的是nginx 错误日志不停报以下错误 2010 05 26 08 53 49 alert 13576 0 accept failed 24 Too many open files 2010 05 26 08
  • 【R语言】期末大作业

    头部 title LZW HR dashboard report output flexdashboard flex dashboard orientation columns vertical layout fill source cod
  • Ant Design Cascader 交互场景

    何时使用 需要从一组相关联的数据集合进行选择 例如省市区 公司层级 事物分类等 从一个较大的数据集合中进行选择时 用多级分类进行分隔 方便选择 比起 Select 组件 可以在同一个浮层中完成选择 有较好的体验 业务场景 提交选择器子选项
  • C++面试题(四)——智能指针的原理和实现

    C 面试题 四 智能指针的原理和实现 tanglu2004 http blog csdn net worldwindjp C 面试题 一 二 和 三 都搞定的话 恭喜你来到这里 这基本就是c 面试题的最后一波了 1 你知道智能指针吗 智能指
  • Commit Lint 代码提交规范

    Commit Lint 代码提交规范 前端后端都可以这样配置的 install commitlint npm install save dev commitlint config conventional commitlint cli In
  • 【待完成】从StrongPity一联网组件到APT的溯源与追踪-中-从单一样本到历史样本和初始载荷

    从单一样本追踪溯源APT历史样本和初始载荷 基于PE结构寻找同源样本 Icon图标Hash ImpHash和version info 基于组件找初始载荷 通过初始载荷扩线 基于PE结构寻找同源样本 Icon图标Hash 通过VT搜索该PE文
  • Python爬虫案例解析:五个实用案例及代码示例(学习爬虫看这一篇文章就够了)

    导言 Python爬虫是一种强大的工具 可以帮助我们从网页中抓取数据 并进行各种处理和分析 在本篇博客中 我们将介绍五个实用的Python爬虫案例 并提供相应的代码示例和解析 通过这些案例 读者可以了解如何应用Python爬虫来解决不同的数
  • L-shape 方法

    L shape 方法是求解两阶段随机规划的一种常用方法 基本思想是利用切平面将第二阶段的反馈函数线性化 在构造切平面条件时有点类似 bender s 方法 注 这个图形中黑实线 Q x mathcal Q x Q x 就是下面模型中的
  • 【已解决】ModuleNotFoundError: No module named ‘distutils.util‘

    系统从Ubuntu18 04升级到20 04 内核也变动了很多次 之前运行在python3 6正常的代码突然报错 ModuleNotFoundError No module named distutils util 网上的解决方法 sudo
  • 字节跳动技术团队年度 TOP10 技术干货,陪你度过不平凡的 2020

    2020 注定是不平凡的一年 在这特殊的一年里 字节跳动技术团队依旧在技术人身边 分享字节跳动的技术实践 本年度字节跳动技术团队共发布了50篇技术干货 其中许多都受到读者的喜爱 值此元旦佳节 我们精选出了其中最受大家欢迎的10 篇文章 供大
  • r语言向量代码如何创建函数c,如何使用R中的rep函数生成的向量创建矩阵?

    仅当我们传递偶数个元素时 才能生成矩阵 如果要使用由rep函数生成的向量创建矩阵 则该向量的长度必须可除以2 例如 如果我们有一个由rep函数创建的向量x 其长度为20 则矩阵说M可以使用matrix x ncol 2 构造使用该向量的10
  • 实验9 I/O流(P293)

    实验目的和要求 1 掌握格式化的输入输出方法 2 熟悉系统提供的输入操作函数 3 掌握磁盘文件的输入输出方法 实验内容 1 程序sy9 1 cpp用以打印表中的数据 但程序中存在逻辑错误 上机调试后写出正确的代码 原程序如下 sy9 1 c