第7单元 - 作业2:编程互评

查看帮助

返回
 

提交作业(剩余10天)

完成并提交作业

 
 

作业批改

互评训练

 
互评作业

 
自评作业

 
 

成绩公布

查看成绩
 

由于在线编程不支持文件操作,因此,本单元的作业需要采用互评方式完成。

在互评评分标准中,会有对题目的解析,所以,想要知道如何做题的同学,一定要参加互评

本次作业有两道题,分别练习文本模式文件IO以及二进制文件IO

依照学术诚信条款,我保证此回答为本人原创,所有回答中引用的外部材料已经做了出处标记。

1
(10分)

题目说明请参见 本单元 【第X节:第7单元作业说明】中的 【第7单元 - 单元作业第2题说明

请提交代码(仅 cpp 文件)。

本作业的解析结果在互评的得分标准中。所以,想要了解如何做这道题的同学,务必进行互评

答案内容超过5000字建议使用附件形式上传
 
#include <fstream>
#include <iostream>
#include <limits> using namespace std; class Screen {
private:
//----补充多个数据域成员 // 在Screen类中获取/释放图形窗口资源,是一种RAII方法
// 关于RAII,可以参见异常处理单元的材料
unsigned int width_;
unsigned int height_;
static Screen *instance; Screen(unsigned int width, unsigned int height) {
// 如果启用了图形库,则将初始化图形模式的函数置于此处
// initgraph(width_, height_);
width_ = width;
height_ = height;
};
~Screen() {
// 如果启用了图形库,则将关闭图形模式的函数置于此处
// closegraph();
delete instance;
instance = NULL;
} public:
//----补充 getWidth() 与 getHeight() 函数,
unsigned int getWidth()
{
return width_;
} unsigned int getHeight()
{
return height_;
} static Screen* getInstance(unsigned int width = 640, unsigned int height = 480) {
// 单例模式
//----补充函数体
Screen* ret = instance;
if (ret == NULL)
{
instance = new Screen(width, height);
ret = instance;
} return ret;
}
}; Screen* Screen::instance = 0;
//----补充Screen类的特殊数据成员初始化语句 int main() {
int width, height;
Screen* screen = 0;
//第7单元 - 单元作业第2题说明 (概要)_1. 用 string 对象保存文件名 "screen.txt";然后创建 fstream 对象,再调用open函数,使用读写模式打开文件。
string fileName = "screen.txt"; fstream fs;//第7单元 - 单元作业第2题说明(详细)_1. 假定文件流对象为 fstream fs; fs.open(fileName, ios::in | ios::out);//第7单元 - 单元作业第2题说明(详细)_2. 读写模式打开文件时,需要使用 ios::in | ios::out 作为流对象fs的 open 函数的参数 //第7单元 - 单元作业第2题说明 (概要)_2. 使用读写模式打开的文件,如果文件不存在,则会打开失败。在这种情况下需要使用单独的“写模式”打开文件然后再关闭该文件,即可创建一个长度为0的空文件。然后再以读写模式打开该文件。
//第7单元 - 单元作业第2题说明(详细)_3. 判断文件操作(打开、读写)是否成功,使用 fs.fail() 判断。如果成功, fail() 返回 false,否则返回 true
if (fs.fail()) {
//输出提示信息
std::cout << "使用读写模式打开的文件,如果文件不存在,则会打开失败。" << std::endl;
//用写模式打开文件
fs.open(fileName, ios::out);
//关闭文件
fs.close();
//再次用读写模式打开文件
fs.open(fileName, ios::in | ios::out);
} //第7单元 - 单元作业第2题说明 (概要)_3. 从打开的文件中,读取屏幕的宽和高。如果读取失败,则从键盘读入屏幕的宽和高。同时,要清除文件流的状态位,否则后面的所有文件操作代码均会失败。
//第7单元 - 单元作业第2题说明(详细)_4. 打开文件后,如果文件为空(大小为0),那么从文件流里面读取数据时会失败。此时需要从键盘读取屏幕的宽和高。然后,需要调用下面的函数,清除文件流的状态位,否则所有后续文件操作都会失败。 //获取文件大小
fs.seekg(0, ios_base::end);
int nFileLen = fs.tellg(); if (nFileLen == 0)
{
std::cin >> width >> height;
fs.clear();
}
else
{
fs.seekg(ios::beg); //将文件的读指针移动到文件头
fs >> width >> height;
} //第7单元 - 单元作业第2题说明 (概要)_4. 保留原 main() 函数中的代码:
screen = Screen::getInstance(width, height);
screen = Screen::getInstance(); //第7单元 - 单元作业第2题说明 (概要)_5. 在文件的头部开始,写入屏幕的宽(screen->getWidth())和屏幕的高度(screen->getHeight())
fs.seekp(ios::beg); //将文件的写指针移动到文件头
fs << screen->getWidth() << " " << screen->getHeight(); //第7单元 - 单元作业第2题说明 (概要)_6. 如果写文件出错,则提示错误信息然后关闭文件并返回 - 1
if (fs.fail())
{
std::cout << "6. 如果写文件出错,则提示错误信息然后关闭文件并返回 - 1" << std::endl;
fs.close();
return -1;
}
//第7单元 - 单元作业第2题说明 (概要)_7. 从文件中读取刚刚写入的屏幕的宽和高,然后显示到屏幕上
fs.seekg(ios::beg); //将文件的读指针移动到文件头
fs >> width >> height;
std::cout << width << " " << height; //第7单元 - 单元作业第2题说明 (概要)_8. 最后关闭文件
fs.close(); return 0;
}

网易云课堂_C++程序设计入门(下)_第7单元:出入虽同趣,所向各有宜 – 文件输入和输出_第7单元 - 作业2:编程互评的更多相关文章

  1. 网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

    第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  2. 网易云课堂_C++程序设计入门(下)_第9单元:白公曾咏牡丹芳,一种鲜妍独“异常”_第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理

    第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前 ...

  3. 网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目

    期末考试在线编程题目 返回考试   本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间 ...

  4. 网易云课堂_C++程序设计入门(下)_第11单元:工欲善其事必先利其器 - STL简介_第11单元 - 单元作业2:OJ编程 - list 与 deque

    第11单元 - 单元作业2:OJ编程 - list 与 deque 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之 ...

  5. 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符

    第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  6. 网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库

    第2节:一个简单的EGE程序 #ifndef _GRAPHICS_H_ #define _GRAPHICS_H_ #ifndef __cplusplus #error You must use C++ ...

  7. 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态_第6单元作业【2】- 在线编程(难度:中)

    第6单元作业[2]- 在线编程(难度:中) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...

  8. 网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)

    第1单元作业 - 写代码 - 互评 (难度:易) 查看帮助 返回   提交作业(截止时间已过) 完成并提交作业     作业批改 互评训练   互评作业   自评作业     成绩公布 查看成绩 温 ...

  9. 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)

    第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...

随机推荐

  1. apache traffic server安装

    wget http://mirrors.hust.edu.cn/apache/trafficserver/trafficserver-7.1.1.tar.bz2 tar -jxvf trafficse ...

  2. 苹果预热 WWDC 2019

    Erika Hairston 是一位来自旧金山的 23 岁耶鲁大学毕业生,她的首款 app Zimela 刚刚上线.这款应用主要为了宣传科技行业的多样性.Hairston 设计的 Zimela 通过建 ...

  3. 将.py文件转换成.exe文件

    1.安装pyinstaller模块 pip install pyinstaller 2.打开python目录下的scripts文件夹 cmd下,使用pyinstaller -F test.py,运行后 ...

  4. 被弃用的php函数以及用来替代的函数

    下面列举了部分被弃用的函数: call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_fun ...

  5. Linux 安装 nginx 安装PCRE库

    PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库.这些在执行正规表达式模式匹配时用与Perl 5同样的语法和语义是 ...

  6. LVM介绍及相关操作

    一.逻辑卷管理器介绍 逻辑卷管理器(英语:Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器.逻辑扇区管理器.逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Log ...

  7. Python之网路编程之socket简单介绍

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  8. SP Flash Tool版本对应MTK处理器型号(SP Flash Tool 版本速查)

    SP Flash Tool v3.1224.0.100 MT6516,MT6573,MT6573,MT6575,MT6575,MT6577, SP Flash Tool v3.1332.0.187 M ...

  9. Fortran代码生成so库

    例: ifort -c -fpic test.f90ifort -shared -o test.so test.o

  10. 两个惊艳的python库:tqdm和retry

    转载到请包括本文地址:http://spaces.ac.cn/archives/3902/ Python基本是我目前工作.计算.数据挖掘的唯一编程语言(除了符号计算用Mathematica外).当然, ...