HM146 二进制读回人员
HM146 二进制读回人员
来源: 第 146 集 C++文件操作-二进制文件-读文件
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
人事档案 person.txt 是按二进制写入的。用记事本打开常会看到乱码,这不是数据坏了:只要按同样的二进制方式读回来,姓名和年龄仍然正确。
自定义类型 Person 含长度为 \(64\) 的字符数组姓名,以及一个 int 年龄。读回时必须走下面步骤,不能只把输入原样打印出去:
- 包含
<fstream>,创建输入流对象ifstream。 - 打开方式必须同时指定“读入”和“二进制”,并用按位或组合:
ios::in | ios::binary。 - 打开后先调用
is_open()。它返回布尔值:为真表示打开成功;前面加!表示打开失败。失败时输出一行文件打开失败,**不要再读**,直接结束。 - 打开成功则调用
read:第一个参数是准备好的对象地址,需转换成char*;第二个参数是这块空间的字节数,使用sizeof(Person)。准备空间必须足够,才能整块读入。 - 读完后必须
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
- 通过率
- ?
- 上传者