2017《面向对象程序设计》课程作业三
新增要求
- 要求将第一次作业中使用静态变量的方法进行改进,推荐使用传参、定义函数有返回值。
- 多参数主函数要求:在命令行中输入的参数为:用户要求题目数量的文件路径、最终结果的文件路径。
D:>a.exe d://in.txt d://out.txt,a.exe为可执行文件,d://in.txt为用户要求的题目数量的文件路径,d://out.txt最终结果的文件路径。 - 要求将程序写成一个.cpp和一个.h的形式。
- 新增函数要求:
int main(int argc,char *argv[]){}
readFile()//读取用户要求的题目数量(请注意参数设置)
writeFile()//将最终结果写入文件,写入内容包括:用户输入的题目数,每个生成的表达式、正确答案、用户输入的答案,保存到命令行中第二个参数指定的路径。(请注意参数设置) - 要求将课程作业一的代码进行迭代,实现以上各个模块。各个模块的形参列表、函数返回值类型可自由定制。
github地址
程序运行截图
- 开始在input.txt中输入题目数。
- 打开cmd窗口,将文件拖入窗口内,注意文件之间要有空格。
遇到问题
- 对应要求,把上次作业中唯一的一个全局变量language(布尔型)改成了局部变量,然后用指针传递。
- 因为之前自己学过命令行参数的知识,所以问题不大,就是要注意路径之间要有空格隔开。
- 这次作业中,需要将数字和字符都输入进文件,但是我所了解的函数只能将字符写入文件,所以就遇到了一个问题:如何将数字转化为字符?刚开始我用了itoa()来转化,可是写入文本的数字都变成了二进制的格式。查了一下发现可能是因为编码不兼容的问题,于是改用sprintf()(用法:sprintf(字符串,“%d”,整型变量))就成功转化了整型变量;
- 在将表达式写入文件时遇到了问题:表达式如:(a+b)+(c+d),既有字符又有数字,要把他们转化成字符串,才能使用writeFile函数。我用了一种不太好的办法:对每一个单元做两步,第一步使用sprintf()转化字符串,第二步用strcat()将他们接在一个总的字符串的末尾后。strcat()遇到'\0'时,把另一个字符串的头覆盖在前一个字符串'\0'上,这样就能把两个字符连起来。
- 文件在cmd窗口里运行时会出现两次的输出:在把东西写入文件时,那些东西会在cmd窗口再显示一次,所以,我把一些重复的输出语句删去,这样就只留下一次的输出。
- 使用git时,遇到了问题(相同的问题,图来源于网络)
有两种解决方法:1、使用git push -f 强行推送覆盖。2、使用git pull 在git push推送。
感想
程序运行有不同的方式,可以双击点开,也可以使用cmd窗口打开,main函数也可以接受参数,在使用文件输入输出时,也有一些需要留意的地方。代码迭代的过程中遇到了许多问题,除了未知的知识以外,很多是不太良好的编码习惯导致的,觉得以后一定要注意编码的规范性,这样可以给自己给别人减少许多麻烦。做作业的过程,搜索查找的过程,一些模棱两可的东西变得更清晰了,一些知识才真正被掌握起来。