HM146 二进制读回人员

HM146 二进制读回人员

HM146 二进制读回人员

来源: 第 146 集 C++文件操作-二进制文件-读文件

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

人事档案 person.txt 是按二进制写入的。用记事本打开常会看到乱码,这不是数据坏了:只要按同样的二进制方式读回来,姓名和年龄仍然正确。

自定义类型 Person 含长度为 \(64\) 的字符数组姓名,以及一个 int 年龄。读回时必须走下面步骤,不能只把输入原样打印出去:

  1. 包含 <fstream>,创建输入流对象 ifstream
  2. 打开方式必须同时指定“读入”和“二进制”,并用按位或组合:ios::in | ios::binary
  3. 打开后先调用 is_open()。它返回布尔值:为真表示打开成功;前面加 ! 表示打开失败。失败时输出一行 文件打开失败,**不要再读**,直接结束。
  4. 打开成功则调用 read:第一个参数是准备好的对象地址,需转换成 char*;第二个参数是这块空间的字节数,使用 sizeof(Person)。准备空间必须足够,才能整块读入。
  5. 读完后必须 close 关闭文件。

写文件用 write,读文件用 read:怎么写进去,就怎么读出来。

输入格式

第一行一个整数 \(n\)(\(0 \le n \le 100\))。

  • 若 \(n=0\):不要创建档案,直接对不存在的路径 missing.bin 按上述方式尝试打开并判断 is_open()
  • 若 \(n \ge 1\):接下来 \(n\) 行,每行一个不含空白的姓名 \(s\) 和一个整数年龄 \(a\)(\(1 \le |s| \le 63\),\(1 \le a \le 150\))。先把这 \(n\) 条记录按二进制写入 person.txt,再按读文件步骤整块读回并输出。

输出格式

  • \(n=0\) 且打开失败:一行 文件打开失败,行末换行。
  • \(n \ge 1\):共 \(n\) 行,第 \(i\) 行格式为 姓名、姓名、一个空格、年龄、年龄,行末换行。姓名与年龄必须来自 read 读回的记录。

样例

输入 #1

1
张三 18

输出 #1

姓名张三 年龄18

输入 #2

0

输出 #2

文件打开失败

说明

  • 打开方式写成 ios::in | ios::binary,中间的 | 不能省略。
  • is_open() 为假时必须立刻停读;路径写错就会走这条分支。
  • read 需要的是 char* 与长度;对 Person 取地址后要做类型转换。
  • 用文本方式打开二进制档案可能看到乱码,评测只检查按二进制读回后的输出。

信息

ID
1145
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者