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窗口,将文件拖入窗口内,注意文件之间要有空格。
    1092889-20170506120121882-1237814998.png

1092889-20170506120158195-1932371233.png

遇到问题

  • 对应要求,把上次作业中唯一的一个全局变量language(布尔型)改成了局部变量,然后用指针传递。
  • 因为之前自己学过命令行参数的知识,所以问题不大,就是要注意路径之间要有空格隔开。
  • 这次作业中,需要将数字和字符都输入进文件,但是我所了解的函数只能将字符写入文件,所以就遇到了一个问题:如何将数字转化为字符?刚开始我用了itoa()来转化,可是写入文本的数字都变成了二进制的格式。查了一下发现可能是因为编码不兼容的问题,于是改用sprintf()(用法:sprintf(字符串,“%d”,整型变量))就成功转化了整型变量;
  • 在将表达式写入文件时遇到了问题:表达式如:(a+b)+(c+d),既有字符又有数字,要把他们转化成字符串,才能使用writeFile函数。我用了一种不太好的办法:对每一个单元做两步,第一步使用sprintf()转化字符串,第二步用strcat()将他们接在一个总的字符串的末尾后。strcat()遇到'\0'时,把另一个字符串的头覆盖在前一个字符串'\0'上,这样就能把两个字符连起来。
  • 文件在cmd窗口里运行时会出现两次的输出:在把东西写入文件时,那些东西会在cmd窗口再显示一次,所以,我把一些重复的输出语句删去,这样就只留下一次的输出。
  • 使用git时,遇到了问题(相同的问题,图来源于网络)
    1092889-20170506193416570-1680912073.png
    有两种解决方法:1、使用git push -f 强行推送覆盖。2、使用git pull 在git push推送。

    感想

    程序运行有不同的方式,可以双击点开,也可以使用cmd窗口打开,main函数也可以接受参数,在使用文件输入输出时,也有一些需要留意的地方。代码迭代的过程中遇到了许多问题,除了未知的知识以外,很多是不太良好的编码习惯导致的,觉得以后一定要注意编码的规范性,这样可以给自己给别人减少许多麻烦。做作业的过程,搜索查找的过程,一些模棱两可的东西变得更清晰了,一些知识才真正被掌握起来。

转载于:https://www.cnblogs.com/vancasola/p/6817880.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值