2.4.2程序作业
2016-03-23 14:25 叶思维 阅读(189) 评论(0) 编辑 收藏 举报本程序能正确统计某程序设计语言源文件的字符数,单词数和行数,并能实现部分拓展功能,如返回程序的代码行/空行/注释行/。程序攻分为4个主要函数,分别统计行数程序,统计字符数和单词数函数,返回代码行和空行函数,返回注释行函数。但程序不完善,我没有写出能递归处理目录下符合条件的文件函数。高级功能我也没有实现。能力有限,只能期待日后改进。
#include<stdio.h> #include<stdlib.h> #include<string.h> void hangshu() { int num=0; FILE*fp; char str[500]; if((fp=fopen("test.txt","rt"))==NULL) { printf("cannot open file\n"); return; } while (fgets(str,500,fp)) { num++; } fclose(fp); printf("该文件共有%d行\n",num); } void count() { char str[500]; int strLen; FILE*fp; int i; int j; int blank=0; int ch=0; int word=0; if((fp=fopen("test.txt","rt"))==NULL) { printf("cannot open file\n"); return; } while(fgets(str, 500, fp)) { strLen = strlen(str); for(i=0;i<strLen;i++) { j=str[i]; if(j==' '||j=='\t') { !blank&&word++; blank=1; } else if(j!='\n'&&j!='\r') { ch++; blank=0; } } !blank&&word++; blank=1; } printf("共有%d个单词,%d个字符",word,ch); } void advanced() { int strLen; FILE*fp; char str[500]; if((fp=fopen("test.txt","rt"))==NULL) { printf("cannot open file\n"); return; } while (fgets(str,500,fp)) { strLen = strlen(str); if(strLen>3) { printf("%s是代码行.\n",str); } if(strLen<=3) { printf("%s是空行.\n",str); } } } void zhushi() { FILE*fp; int i =0; char str[500]; if((fp=fopen("test.txt","rt"))==NULL) { printf("cannot open file\n"); return; } fp=fopen("test.txt","r"); while(fgets(str,500,fp)) { str[i]=fgetc(fp); i++; } if (str[i]='\\') printf("%s是注释行\n",str); fclose(fp); } void Menu() { printf("--------------------\n"); printf("----程序主菜单------\n"); printf("--------------------\n"); printf("----1显示行数---\n"); printf("----2显示单词数和字符数----\n"); printf("----3返回代码行和空行-------\n"); printf("----4返回注释行-------\n"); printf("----5退出-----------\n"); printf("---回车键返回菜单---\n"); printf("--------------------\n"); printf("---请选择:(1-5)-:---\n"); } void main() { char menuNum; while(1) { Menu(); scanf("%d",&menuNum); switch(menuNum) { case 1: hangshu(); break; case 2: count(); break; case 3: advanced(); break; case 4: zhushi(); break; case 5: exit(0); default: printf("\n输入错误!\n"); printf("按任意键返回....\n"); getchar(); } } }