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看来不是网的原因FQ之后依然传不上,哪天成功了一定回来补图
终于上传成功了,说好的回来补图
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放在了一起(当然更多的是因为我懒),首先一个学期下来特别感谢老师的辛勤付出,我知道每次作业我们写一份非常费时间,老师评论批改七十多份也很费时间。但是在这最后的时刻,我还是想抱怨一句“博客作业真的很难写!!!”。建议老师在下次教授跟我们同样类型的同学时先了解一下相关的情况,我们的课和各种活动真的很多(虽然这些都不能作为我们不写作业的理由)我们的精力毕竟有限,想用有限的精力及时高质量的完成所有的任务有时真的很困难。有些时候我也有些厌烦我们现在的形式,明明我写一道题目十几分钟就能完成,但是我要用半个多小时甚至一个小时来写这道题的博客,往往我们每次上完课后留下的作业题目还并不是一道题目,我认为作业不求量多但求精细,比如我们可以每次上完课之后只要求大家认真精细的抠一道题目,从一道中学习巩固知识,其他的题目可以作为选做题不做硬性的要求,认为自己做的不够好的还可以利用选做题来巩固和学习。抱怨归抱怨最后还是要对我们的牛老师表示由衷的感谢。