C高级第四次作业
作业要求一
最简单的wordcount
具体要求:http://www.cnblogs.com/xinz/p/7426280.html
1.设计思路:
0.0版本设计思路:
第一步:读入用户想要操作的文件名
第二步:找到并打开文件
第三步:if语句匹配相关功能
第四步:实现相关功能并返回结果
第五步:关闭文件
1.0版本设计思路
对0.0版本的优化,如果输入不相关的字符程序提示
2.主要代码
0.0版本的相关代码
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char name[20];//用来存需要操作的文件的文件名
char function[2];//用来匹配对相关文件需要进行的操作
int charNum=0,wordNum=0,lineNum=0;//分别用来统计字符数、词数和行数
//读入文件名
printf("请输入需要进行操作文件的文件名:");
scanf("%s",&name);
//定义文件指针
FILE *fp;
//打开文件
if(( fp = fopen( name, "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//读入想要对文件进行的相关操作
printf("请输入需要对文件进行的相关操作\n -c统计文件中的字符数\n -w统计文件中的词数\n -l统计文件的行数\n");
scanf("%s",&function);
//匹配读入的功能并操作文件
//统计文件字符数
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函数从指定文件中读取一个字符EOF用来检测是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
charNum--;
printf("文件中的字符数为:%d",charNum);
}
//统计文件词数
if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("文件中的词数为:%d",wordNum);
}
//统计文件行数
if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
printf("文件中的行数为:%d",wordNum);
}
//关闭文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
3.遇到的相关问题及解决方式

错误分析:第一次写的时候function是一个字符串,在使用if匹配的时候为报多字符常数常数异常
解决方法:将function写成一个字符数组分别比对两个字符是否匹配
1.0版本主要代码
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char name[20];//用来存需要操作的文件的文件名
char function[2];//用来匹配对相关文件需要进行的操作
int charNum=0,wordNum=0,lineNum=0;//分别用来统计字符数、词数和行数
//读入文件名
printf("请输入需要进行操作文件的文件名:");
scanf("%s",&name);
//定义文件指针
FILE *fp;
//打开文件
if((fp = fopen( name, "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//读入想要对文件进行的相关操作
printf("请输入需要对文件进行的相关操作\n -c统计文件中的字符数\n -w统计文件中的词数\n -l统计文件的行数\n");
scanf("%s",&function);
//匹配读入的功能并操作文件
//统计文件字符数
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函数从指定文件中读取一个字符EOF用来检测是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("文件中的字符数为:%d",charNum);
}
//统计文件词数
else if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("文件中的词数为:%d",wordNum);
}
//统计文件行数
else if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("文件中的行数为:%d",wordNum);
}
else{
printf("输入错误!没有对应功能\n 请关闭窗口重新运行程序。");
}
//关闭文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
2.0版本:加入argc argv[]
操作过程中出现的错误:字符集编码问题


解决办法:将所有提示字符串全部换成英文
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
//如果用命令行操作,默认第一个参数为要操作的文件名argv[1],第二个参数是匹配的操作argv[2]
if(argc==1){
char name[20];//用来存需要操作的文件的文件名
char function[2];//用来匹配对相关文件需要进行的操作
int charNum=0,wordNum=0,lineNum=0;//分别用来统计字符数、词数和行数
//读入文件名
printf("Please enter the file name that needs to be done:");
scanf("%s",&name);
//定义文件指针
FILE *fp;
//打开文件
if((fp = fopen( name, "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//读入想要对文件进行的相关操作
printf("Please enter the relevant operation that needs to be done to the file:\n -c The number of characters in a statistical file.\n -w The number of words in a statistical document.\n -l The number of rows in a statistical file.\n");
scanf("%s",&function);
//匹配读入的功能并操作文件
//统计文件字符数
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函数从指定文件中读取一个字符EOF用来检测是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("The number of characters in the file is:%d",charNum);
}
//统计文件词数
else if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
ch=fgetc(fp);
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("The number of words in the document is:%d",wordNum);
}
//统计文件行数
else if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("The number of rows in the file is:%d",wordNum);
}
else{
printf("Input error!There is no corresponding function\n Please close the window and rerun the program.");
}
//关闭文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
}
else if(argc==2){
char function[2];//用来匹配对相关文件需要进行的操作
int charNum=0,wordNum=0,lineNum=0;//分别用来统计字符数、词数和行数
//定义文件指针
FILE *fp;
//打开文件
if((fp = fopen( argv[1], "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//读入想要对文件进行的相关操作
printf("Please enter the relevant operation that needs to be done to the file:\n -c The number of characters in a statistical file.\n -w The number of words in a statistical document.\n -l The number of rows in a statistical file.\n");
scanf("%s",&function);
//匹配读入的功能并操作文件
//统计文件字符数
if((function[0]=='-')&&(function[1]=='c')){
char ch;
ch = fgetc(fp);//fgetc(文件名)函数从指定文件中读取一个字符EOF用来检测是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("The number of characters in the file is:%d",charNum);
}
//统计文件词数
else if((function[0]=='-')&&(function[1]=='w')){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("The number of words in the document is:%d",wordNum);
}
//统计文件行数
else if((function[0]=='-')&&(function[1]=='l')){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("The number of rows in the file is:%d",wordNum);
}
else{
printf("Input error!There is no corresponding function\n Please close the window and rerun the program.");
}
//关闭文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
}
else if(argc==3){
int charNum=0,wordNum=0,lineNum=0;//分别用来统计字符数、词数和行数
//定义文件指针
FILE *fp;
//打开文件
if((fp = fopen( argv[1], "r" )) == NULL){
printf(" File open error!\n" );
exit(0);
}
//统计文件字符数
if(!strcmp(argv[2],"-c")){
char ch;
ch = fgetc(fp);//fgetc(文件名)函数从指定文件中读取一个字符EOF用来检测是否到文件的末尾
while(ch!=EOF){
charNum++;
ch = fgetc(fp);
}
printf("The number of characters in the file is:%d",charNum);
}
//统计文件词数
else if(!strcmp(argv[2],"-w")){
char ch;
while(feof(fp)==0){
fscanf(fp,"%s",&ch);
wordNum++;
}
wordNum--;
printf("The number of words in the document is:%d",wordNum);
}
//统计文件行数
else if(!strcmp(argv[2],"-l")){
char ch;
ch = fgetc(fp);
while(ch!=EOF){
if(ch=='\n'){
wordNum++;
}
ch = fgetc(fp);
}
wordNum++;
printf("The number of rows in the file is:%d",wordNum);
}
//关闭文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
}
return 0;
}
在命令行中的操作截图:

学习进度总结:
1.我的Github地址:https://github.com/XINJY/The-homework-of-C
上传成功截图:今天总是上传失败,可能是网络问题,待上传成功之后回来补截图
emmmm看来不是网的原因翻墙之后依然传不上,哪天成功了一定回来补图
终于上传成功了,说好的回来补图

2.点评的同学
袁中:http://www.cnblogs.com/2719610441qqcom/p/8992324.html
李伍壹:http://www.cnblogs.com/chenxidream/p/8992880.html
姜健:http://www.cnblogs.com/jj990519/p/8992796.html
申怡苗:http://www.cnblogs.com/Vinecy/p/8992802.html
3.图表和折线图
最后一次作业是查着各种资料一边写着敲着代码一边写着博客到底用了多长时间我自己都不知道
博客字数太多单独做了折线图



4、本学期课程即将结束,请总结下你本课程的收获,回顾第0次作业,你是否实现了你的目标?
本课程的收获:专业知识层面的就不一一列举了,说说博客作业吧,还记得课程刚开始的时候,那个时候的我还不知道什么是博客作业,更不知道该怎么写所谓的博客作业。现在我可以流畅的写下自己的解题思路,娴熟的使用ProcessOn画出合格的流程图,学会了简单的使用那个从前只在别人口中听说过的Github,能够熟练的使用Markdown的简单语法对自己的博客进行排版,能特别认真的去追究一个报错的错误到底出现在哪里到底该如何去描述这个错误到底该如何去改正这个错误,这些都是写博客作业带来的收获。
第0次作业:http://www.cnblogs.com/X-JY/p/8516188.html
再次回顾第0次作业仿佛那个斗志昂扬的自己就在昨天,不知不觉9个周已经过去了,这可能是我最后一次上C语言课,但我的C语言学习历程绝对不会就此打住。
好了回到正题,下面开始回顾我的第0次作业目标的实现情况:理想总是比现实丰满很多,那所谓的书籍并根本就没有翻开,那所谓的锻炼项目根本就没有去找,虽然逼着自己认真学习但还是会有上课走神的时候。总的来说,当时的目标也实现了也没有实现,我相信在未来的日子里我会做的更好,我永远都欠着这个世界一个更优秀的自己。
5、你对目前的上课和作业方式(上课讲解+PTA+博客)有何意见和建议?
6、终于我们即将不再是师生。当你结束本课程,你和我就站在同样的位置上,我将不再基于学校授权和知识、经验 (年龄?)上的优势而对你的自由有任何干扰。除发布成绩以外,我最后一次行使教师特权: 请问你有什么要对教师 (我)说的,建议、抱怨、希望……多谢。
为了避免建议上的重复我将5和6放在了一起(当然更多的是因为我懒),首先一个学期下来特别感谢老师的辛勤付出,我知道每次作业我们写一份非常费时间,老师评论批改七十多份也很费时间。但是在这最后的时刻,我还是想抱怨一句“博客作业真的很难写!!!”。建议老师在下次教授跟我们同样类型的同学时先了解一下相关的情况,我们的课和各种活动真的很多(虽然这些都不能作为我们不写作业的理由)我们的精力毕竟有限,想用有限的精力及时高质量的完成所有的任务有时真的很困难。有些时候我也有些厌烦我们现在的形式,明明我写一道题目十几分钟就能完成,但是我要用半个多小时甚至一个小时来写这道题的博客,往往我们每次上完课后留下的作业题目还并不是一道题目,我认为作业不求量多但求精细,比如我们可以每次上完课之后只要求大家认真精细的抠一道题目,从一道中学习巩固知识,其他的题目可以作为选做题不做硬性的要求,认为自己做的不够好的还可以利用选做题来巩固和学习。抱怨归抱怨最后还是要对我们的牛老师表示由衷的感谢。
C高级第四次作业的更多相关文章
- Java第四次作业——面向对象高级特性(继承和多态)
Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...
- Java第四次作业,面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- Java第四次作业—面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- 2018上C语言程序设计(高级)博客作业样例
要求一(20分) 完成PTA中题目集名为<usth-C语言高级-第1次作业>中的所有题目. 要求二 PTA作业的总结(20分+30分) 将PTA第1次作业作业中以下2道题的解题思路按照规定 ...
- C高级第三次作业
C高级第三次作业(1) 6-1 输出月份英文名 1.设计思路 (1)算法: 第一步:定义整型变量n,字符指针s,输入一个数赋给n. 第二步:调用函数getmonth将值赋给s. 第三步:在函数getm ...
- C高级第二次PTA作业
6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...
- 耿丹CS16-2班第四次作业汇总
Deadline: 2016-10-13 12:00 作业内容 实验3-1 分别使用while循环.do while循环.for循环求1+2+3+ --+100. 实验3-2 分别使用while循环. ...
- 第四次作业——WORDSEARCH小游戏
“谁想出来的这么缺德的题目啊!!!!”一个声音在我心中回荡 这个题目很早就在课堂上公布了,我和我的小伙伴都惊呆了! 这是个毛?根本无从下手的感觉 总是觉得这个小游戏不是程序能给出答案的,因为我的第一印 ...
- Stm32高级定时器(四)
Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根 ...
随机推荐
- Java Selenium 笔记
目录一.基本语句 1.循环控制(break,continue) 3.字符的替换(replace,repalceFirst,replaceAll,regex) 4.字符串的连接("+" ...
- TDD、BDD、DDD
TDDTest-Driven DevelopmentTest-Driven Development (TDD) is a software development technique where au ...
- Jmeter 之 ServerAgent 在性能测试的时候通过插件监听数据库状态
https://jmeter-plugins.org/downloads/old/ 下载几个jar包,导入到Jmeter对应到目录下/lib/ext文件夹下,注意只支持Jmeter3.2(不含)以下版 ...
- MongoDB (课时1,2)
1.数据库之中支持的的SQL语句是由IBM开发出来的,使用并不麻烦,就是几个简单的单词:select, from, where, group by, having, order by.目前最流行的数 ...
- [原][OSG]深入osg函数----SceneView::cull 函数
参考:最长一帧 先介绍几个类: osgUtil::CullVisitor:“筛选访问器” 当我们使用它遍历场景图形的各个节点时, CullVisitor 将会对每一个遇到的节点执行场景筛选的工作,判断 ...
- Thunder团队Final版爱阅app发布视频
视频链接:https://www.bilibili.com/video/av17008792/ 视频简介:首先出现的是我们团队的logo,接着是Final版爱阅app的功能展示,紧接着是我们团队的开发 ...
- 《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)
// 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次.请 ...
- 用docker部署gitlab
docker hub官网下载gitlab速度太慢,改用国内镜像+中文版 docker pull registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh ...
- mapStateToProps,mapDispatchToProps的使用姿势
本文作者:IMWeb 黄qiong 原文出处:IMWeb社区 未经同意,禁止转载 前言 刚接触redux的时候,发现大家对mapDispatchToProps使用有几种方法,而且都跑通了,本文来介绍下 ...
- 机器学习 Matplotlib库入门
2017-07-21 15:22:05 Matplotlib库是一个优秀的python的数据可视化的第三方类库,其中的pyplot支持了类似matlab的图像输出操作.matplotlib.pyplo ...