1.gitHub地址:https://github.com/loveYuJun/wc.exe.git
2.PSP表格
| psp2.1 | Personal Software Process Stages |
预估耗时(分钟) | 实际耗时(分钟) |
| Planning | 计划 |
45 | 50 |
| Estimate | 估计这个任务所需时间 | 45 | 50 |
| Development | 开发 | 640 | 520 |
| Analysis | 需求分析(学习新技术) | 200 | 150 |
| Design spec | 生成设计文档 | 10 | 10 |
| Design Review | 设计复审 | 30 | 15 |
| Coding standard | 代码规范(为目前开发制定合适的规范) | 10 | 10 |
| Design | 具体设计 | 30 | 25 |
| Coding | 具体编码 | 100 | 120 |
| Code Review | 代码复审 | 60 | 40 |
| Test | 测试(自我测试,修改代码,提交修改) | 200 | 150 |
| Reporting | 报告 | 100 | 90 |
| Test Report | 测试报告 | 20 | 30 |
| Size Measurement | 计算工作量 | 20 | 30 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程修改计划 | 60 | 30 |
| 合计 | 785 | 600 |
3.解题思路
使用C语言进行读取文件,主要利用C语言中的函数fgetc(),以进行对文档中的字符,词,行的计算。
4.设计实现过程
利用函数fgetc()读取到文件末尾时,会返回一个EOF,以此作为循环结束的条件,可以直接得到字符数;在此循环条件下对读取到的字符进行判定,当字符不为空白符或标点符号时,判定这是一个词的开始,当再次遇到空白或标点符号时,判定一个词的结束;在循环条件下,计算换行符出现的次数,结果加1即为行数。
5.主要代码
//主函数加全局变量
FILE *fp;
char flag;
int main(){
char filename[50];
printf("please input filename!\n");
gets(filename);
countchar(filename);
countword(filename);
countline(filename);
}
//计算字符数
int countchar(char *filename){
int chars=0;
fp=fopen(filename,"r");
flag=fgetc(fp);
for( ; flag!=EOF ; ){
chars++;
flag=fgetc(fp);
}
printf("The char count of the file is %d.\n",chars);
fclose(fp);
return 0;
}
//j计算词数
int countword(char *filename){
int words=0;
fp=fopen(filename,"r");
flag=fgetc(fp);
int inword=false;
for( ; flag!=EOF ;){
if(!isspace(flag)&&!ispunct(flag)&&!inword){
words++;
inword=true;
}
if(inword&&isspace(flag)||ispunct(flag))
inword=false;
flag=fgetc(fp);
}
printf("The word count of the file is %d.\n",words);
fclose(fp);
return 0;
}
//计算行数
int countline(char *filename){
int lines=0;
fp=fopen(filename,"r");
flag=fgetc(fp);
for( ;flag!=EOF ;){
if(flag=='\n')
lines++;
flag=fgetc(fp);
}
lines++;
printf("The line count of the file is %d.\n",lines);
fclose(fp);
return 0;
}
6.测试运行
(1)空白文档


(2)单行文档


(3)多行文档


7.项目小结
通过这次的作业,我认识到C语言还有不了解的,同时,在这个过程中,我更加了解了fgetc()函数的使用,了解了一个软件开发的较为具体的过程。
来源:https://www.cnblogs.com/frx2000/p/12563663.html