2.4.2程式作業

葉思維發表於2016-03-23

本程式能正確統計某程式設計語言原始檔的字元數,單詞數和行數,並能實現部分擴充功能,如返回程式的程式碼行/空行/註釋行/。程式攻分為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("---Enter鍵返回選單---\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();

}
}
}

  

相關文章