您的位置:首页 > 编程语言 > C语言/C++

一个统计代码行数的程序C语言

2010-10-15 18:48 721 查看
我这么说其实是有歧义的,因为这个东西根本没有那么通用.不过有很简单的办法让这个程序更加通用,我介绍下运行此程序前的前期准备.

首先, 将所有代码文件放置到同一个空文件夹中.选定所有代码,重命名为1.于是有了下面的效果:








所有文件都是排列好的了,这样方便我操作.下面贴出来效果图,还真是令我惊讶的一个结果呢.







从5月24号开始自己已经写了这么多代码了啊.

下面附上源码,很简单的实现方式.不过居然也费了我两个小时,真搞不懂这两个小时我都干嘛了...可能就是我没瞧得起这么简单的一个任务,计划不周详,才导致这个结果的吧.还可能什么啊..就是这个样子!

#include <stdio.h>   
#include <string.h>   
#include <stdlib.h>   
#define INITIAL_VALUE 1   
#define NUMBER_LENTH 4   
#define BIG_SPACE 10   
#define FULL_NAME_LENTH 15   
#define PF '/n'   
#define FINISH printf ("全部文件统计完毕,报告如下:/n")   
#define ERROR(i) printf ("第%d个文件关闭失败/n", i)   
  
struct item   
{   
    int the_number_of_char ;   
    int the_number_of_enter ;   
} ;   
  
int main (void) ;   
void get_full_name_base_on_number (const int integer, char * string) ;          /*  根据数字值获得文件全名 */  
struct item count_and_printf (FILE * const fp, const int i) ;                   /*  计算并返回当前文件字符数以及行数    */  
  
int main (void)   
{   
    FILE * fp ;   
    char file_name[FULL_NAME_LENTH] ;   
    int i, max_char_file, max_enter_file ;   
    struct item temp, sum, max ;   
  
    sum.the_number_of_char = sum.the_number_of_enter = 0 ;   
    max.the_number_of_char = max.the_number_of_enter = 0 ;   
    for (i = INITIAL_VALUE; ; i++)   
    {   
        get_full_name_base_on_number (i, file_name) ;   
        if (NULL == (fp = fopen (file_name, "r")))   
        {   
            FINISH ;
			i-- ;
            break ;   
        }   
        else  
        {   
            temp = count_and_printf (fp, i) ;   
            sum.the_number_of_char += temp.the_number_of_char ;   
            sum.the_number_of_enter += temp.the_number_of_enter ;   
            if (temp.the_number_of_char > max.the_number_of_char)   
            {   
                max.the_number_of_char = temp.the_number_of_char ;   
                max_char_file = i ;   
            }   
            if (temp.the_number_of_enter > max.the_number_of_enter)   
            {   
                max.the_number_of_enter = temp.the_number_of_enter ;   
                max_enter_file = i ;   
            }   
        }   
        if (fclose (fp) != 0)   
        {   
            ERROR (i) ;   
            exit (EXIT_FAILURE) ;   
        }   
    }   
    printf ("  文件总数:%-5d全部字符数:%-10d全部行数:%-10d/n"  
            , i, sum.the_number_of_char, sum.the_number_of_enter) ;
	if (i)
		printf ("  最大字符数:%-10d出现在文件:1 (%d).c中/n  最大行数:%-10d出现在文件:1 (%d).c中/n",
		max.the_number_of_char, max_char_file, max.the_number_of_enter, max_enter_file) ;   
    getchar () ;   
  
    return 0 ;   
}   
  
void get_full_name_base_on_number (const int integer, char * string)   
{   
    char number[NUMBER_LENTH] ;   
  
    strcpy (string, "1 (") ;   
    sprintf (number, "%d", integer) ;   
    strcat (string, number) ;   
    strcat (string, ").c") ;   
}   
  
struct item count_and_printf (FILE * const fp, const int i)   
{   
    struct item sum ;   
    char ch ;   
       
    sum.the_number_of_char = 0, sum.the_number_of_enter = 0 ;   
    while ((ch = getc (fp)) != EOF)   
    {   
        if (PF == ch)
            sum.the_number_of_enter++ ;
		else
			sum.the_number_of_char++ ;   
    }   
    sum.the_number_of_enter++ ;   
    printf ("当前第:%-2d个文件: 字符数:%-5d 行数:%-10d/n", i, sum.the_number_of_char, sum.the_number_of_enter) ;   
  
    return sum ;   
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐