本程序能正确统计某程序设计语言源文件的字符数,单词数和行数,并能实现部分拓展功能,如返回程序的代码行/空行/注释行/。程序攻分为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();
}
}
}