前言

乍看题目,用文件读取数据,这不是很简单的事嘛ps:以前写单个.cpp就是用freopen读取数据,然而当开始写的时候就出现了问题(什么叫做实力作死,有一种痛叫too young too simple),因为第一次使用C++中的文件流fstream,不是很熟悉,所以出现各种bug,然后又各种debug,整个人都不好了!!!

传送门:

repository

information of problem

写在之前:因为西瓜犇犇贴出了我程序中的bug,于是我在某年某月某天走上了不归路,于某年某月某日卒于debug!(珍爱生命,远离debug->然而并不可能)

这里贴出自己处理不规范表达式(又臭又长 不要介意)的代码(赌5毛 肯定还有bug[笑着哭]):

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
//--------------------------------------------
string input,temp="";
int i,j,n,t;
//--------------------------------------------
int main()
{
freopen ( "xx.in ","r",stdin );
freopen ( "xx.out","w",stdout);
cin >> input;
int l=input.size();
for (i=0;i<l;i++)
{
if (input[i] != '=')
temp += input[i];
}
input = "";
input = temp;
cout << temp << endl << input << endl;
for (i=0;i<l;i++)
{
if(input[i]=='(')
n++;
if(input[i]==')')
t++;
}
if(n>t)
{
for (i = 0; i < n-t; i++)
{
input += ")";
}
}
if(n < t)
{
for(i=0;i<t-n;i++)
temp += "(";
input=temp+input;
}
temp = "";
l=input.size();
for (i=0;i<l;i++)
{
if ((i+1)<l&&input[i]=='('&&input[i+1]=='(')
temp+=input[i];
else if((i+1)&&input[i]=='('&&input[i+1]<'0')
{
temp+=input[i];
temp+="0";
}
else
temp+=input[i];
}
l = temp.size();
input="";
for (i=0; i<l;i++)
{ if((i+1)<l&&((temp[i] >= '0' && temp[i+1] == '(') || (temp[i] == ')' && temp[i+1] >= '0')))
{
if (temp[i+1] == '=')
continue;
input += temp[i];
input += "*";
}
else
if((i+1) < l && temp[i] < '0' && temp[i+1] < '0' && temp[i] != temp[i+1] && temp[i] >= 42 && temp[i+1] >= 42)
{
input += temp[i];
input += "(0";
input += temp[++i];
if(temp[++i] == '(')
{
n = 0;
for ( i=i; i < l ; i++)
{
input += temp[i];
if(temp[i]=='(')
{
n++;
}
if(temp[i]==')')
{
n--;
if(n==0)
break;
}
}
if (i<l)
input += ")";
}
else
{
input += temp[++i];
input += temp[++i];
input += ")";
}
}
else
input += temp[i];
}
input += "=";
cout << input << endl;
return 0;
}

进入主题:

1.这次作业要求输出都在print类里面,这就要就在print类里动手脚,如下:

print.h区段

#ifndef PRINT_H
#define PRINT_H
#include <iostream>
#include <string>
#include "scan.h"
#include "calculate.h" using namespace std; /*创建Print类用来输出队列并定义类当中的函数*/
class Print
{
public:
Print();
~Print();
void PrintStringQueue(string input);
void Printanswer(string input);
void Usedfile(string input, string read, string ans);
private:
}; #endif

从头文件里就可以看出端倪,在print类里面分别写三个函数用来执行不同指令PrintStringQueue函数用来接收指令-a输出表达式及结果,Printanswer只输出结果,Usedfile接收指令-f,顾名思义就是用文件读取数据;

2.新的读取方式的添加:

main.cpp区段

#include <iostream>
#include <string>
#include "print.h" using namespace std; int main(int argc, char* argv[])
{
/*创建Print的对象p*/
Print p;
string input; input = argv[1];
if (input == "-a")
{
input = argv[2];
//调用Print类 输出队列和结果
p.PrintStringQueue(input); }
else
if(input == "-f")
{
input = "";
string write = argv[2];
string result = argv[3];
p.Usedfile(input,write,result);
}
else
{
input = argv[1];
p.Printanswer(input);
}
return 0;
}

以上采用命令行输入的方式运行程序;



3.对项目的整体框架描述:



(没有下visor,自己瞎搞了框架图)结合main.cpp及print.h,整个项目以main函数为入口,通过不同的指令,调用print类里面的3个含参函数,然后在print类里面执行相应的指令,得出输出结果;

ps:待我下个visor,补个完整的给你!

补充的框架图:

END:

1.问题:写文件的时候遇到读不出文件的问题,在各路大神的点拨及自己debug中,逐步逐步的排查语句,最终解决问题;

2.收获:①虽然只是简单的文件输入输出,但是使用过程中仍需注意许多细节,还是初步学会了C++fstrem的简单使用;

②虽然自己调试了很久,浪费了很多时间和精力,但是最后,自己的debug能力还是有所提升,还是有所收获;

3.参考资料:

C++之文件IO操作流

未完待续~~~~~~~~to be continue!

C++项目第五次作业之文件的读取的更多相关文章

  1. 第五次作业——Alpha项目测试

    第五次作业——Alpha项目测试 格式描述: 这个作业属于哪个课程 2019秋软工17级系统分析与设计 这个作业要求在哪里 作业要求 团队名称 杨荣模杰和他的佶祥虎 这个作业的目标 测试其他组项目并写 ...

  2. c++ 第五次作业(计算器第三步)

    第五次作业 (计算器第三步) 项目源文件地址:calculator 本次作业改进情况 加入多种读入选择 正常输出答案 -a 选项,输出表达式以及值 -f 选项,从指定文件读入,并把答案输出到指定文件 ...

  3. 团队第五次作业——Alpha2

    一.相关信息 Q A 作业所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 作业要求 https: ...

  4. 永远的Ace 实验五 团队作业2:XXX企业设施设备云上资料室

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu-da ...

  5. React 实践项目 (五)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! React 实践项目 (一 ...

  6. 17秋 软件工程 团队第五次作业 Alpha Scrum1

    题目:团队作业--Alpha冲刺 17秋 软件工程 团队第五次作业 Alpha Scrum1 各个成员在 Alpha 阶段认领的任务 伟航:督促和监督团队进度,协调组内合作 港晨:APP前端页面编写: ...

  7. 17秋 软件工程 团队第五次作业 Alpha Scrum2

    17秋 软件工程 团队第五次作业 Alpha Scrum2 今日完成的任务 杰麟:Java后端的学习: 世强:登录和注册接口编写: 港晨:完成数据库表的设计: 树民.陈翔:完成超级管理员后端框架. 其 ...

  8. 17秋 软件工程 团队第五次作业 Alpha Scrum3

    17秋 软件工程 团队第五次作业 Alpha Scrum3 今日完成的任务 杰麟:java后端学习: 世强:Android的部门基础信息模块的信息显示和对接后台: 港晨:后台管理登陆界面ui设计: 树 ...

  9. 17秋 软件工程 团队第五次作业 Alpha Scrum4

    17秋 软件工程 团队第五次作业 Alpha Scrum4 今日完成的任务 世强:部门基础信息模块数据更新.部门审核提交: 港晨:设计编写登录界面的一部分: 树民:学习python基本语法.flask ...

随机推荐

  1. hadoop学习笔记(十):MapReduce工作原理(重点)

    一.MapReduce完整运行流程 解析: 1 在客户端启动一个作业. 2 向JobTracker请求一个Job ID. 3 将运行作业所需要的资源文件复制到HDFS上,包括MapReduce程序打包 ...

  2. [转] 如何选择正确的Hadoop版本

    Gartner:如何选择正确的Hadoop版本 这份报告的全名是<How to Choose the Right Apache Hadoop Distribution>.主要介绍了企业如何 ...

  3. GetHashCode方法学习

    GetHashCode方法我的理解是做两个对象的比较,每个对象,不管是值类型还是应用类型都提供这个基本函数,都可以去重写它.GetHashTable通常用于HashTable.List<> ...

  4. JVM GC总结

    判断对象存活 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,引用失效时,计数器就减1:任何时刻计数器都为0的对象就是不可能再被使用的. 问题:无法解决对象之间的相互循 ...

  5. 面试----java基础集合---------------------comparable和comparator 的区别

    comparable接口     是主要是用来自定义类存储在主要是TreeSet,TreeMap(键)集合中存储时,自定通过实现这种接口得到自然排序的功能. comparator 接口  是主要是用来 ...

  6. content-box与border-box区别

    理解box-sizing属性border-box,content-box,其实也是理解正常盒模型与异常盒模型. 正常盒模型 正常盒模型,是指块元素box-sizing属性为content-box的盒模 ...

  7. Pig安装与应用

    1.  参考说明 参考文档: http://pig.apache.org/docs/r0.17.0/start.html#build 2.  安装环境说明 2.1.  环境说明 CentOS7.4+ ...

  8. Spring Boot—03REST请求

    package com.smartmap.sample.ch1.controller.rest; import java.util.List; import org.apache.commons.lo ...

  9. TensorFlow分布式部署【多机多卡】

    让TensorFlow们飞一会儿 前一篇文章说过了TensorFlow单机多卡情况下的分布式部署,毕竟,一台机器势单力薄,想叫兄弟们一起来算神经网络怎么办?我们这次来介绍一下多机多卡的分布式部署. 其 ...

  10. BlockingQueue介绍及使用

    1.BlockingQueue队列和平常队列一样都可以用来作为存储数据的容器,但有时候在线程当中 涉及到数据存储的时候就会出现问题,而BlockingQueue是空的话,如果一个线程要从Blockin ...