c - 读取代码并计算其中的行数的程序,不包括注释和空行

标签 c whitespace line-count

我正在尝试创建一个程序,给定一个输入文件,返回输入文件中所有代码行的计数,不包括空行和注释行。我编写了以下代码,但是我需要有关如何排除包含注释和空行的行的帮助。

#include<stdio.h>
int main()
{
    int count;
    char ch;
    FILE *fptr;
    clrscr();
    fp=fopen("test.cpp","r");
    if(fp==EOF)
        {
        perror("Error:");
        }
    else
    {
        while(ch!=EOF)
        {
            ch=fgetc(fptr);
            if(ch=='\n')
                count++;
            if(ch=='\\')
                count--;
            if(ch=='\*')
                          {
                while(ch!='*\')
                                    {
                    ch=fgetc(fptr);
                                    }
            }
        }
    printf("the lines in the code are %d\n",count);
    fclose (fptr)
    }
    getchar();
    return 0;
}

如何修改上面的代码,不计算空行和注释行?

最佳答案

如果逐个字符地读取输入文件,与逐行读取相比,您需要做更多的工作。毕竟你在数线......

伪代码

    1. initialize line count to 0
    2. read a line
    3. end of file? yes: goto 7
    4. is it a good line? yes: goto 5; no: goto 2
    5. increment line count
    6. repeat from 2
    7. output line count

现在你问……什么是好的台词?
对于程序的近似值,我建议您考虑一行除了由 0 个或更多空格组成的行之外的所有内容。此近似值将对评论进行计数,但您可以从此处开发您的程序。

以下版本会忽略空行上带有//注释的行。

版本 3 可以忽略同时包含 /**/ 的行

第 4 版将处理多行注释。

最重要的是,玩得开心!

关于c - 读取代码并计算其中的行数的程序,不包括注释和空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860794/

相关文章:

c - 初始化 union 成员 - 使用 MS visual studio

objective-c - 声明具有两种类型的 typedef

java - 我怎样才能摆脱 "white spaces"

Java ResourceBundle 值中的前导空格

xslt - 如何使用xslt计算输出行数?

c - 从字符串中提取单词(单词之间用空格和制表符分隔,可能是多个)

c - 从C中的字符串中获取子字符串

linux - 为 unix 中的文件中的每一行添加不同的计数

struts - 删除 WebSphere 中 J2EE/Struts 应用程序中不必要的空格

ubuntu - 如何计算当前目录和子目录中所有文件中的所有行?