使用c的文件中的行数

时间:2012-12-29 08:11:57

标签: c file

我刚接触CI中的文件处理正在开发一个程序,用于计算c中的行数和字符数。该程序对于字符工作正常但是对于行,o / p总是少一个。我使用了新的用于计算编号的行字符。 of lines.Here是我的代码:

 main()
{
    FILE *fp;
    int c,nl=0,nc=0;
    char str[20];
    printf("Enter filename\n");
    scanf("%s",str);
    fp=fopen(str,"r");
    if(fp==NULL)
    {
        while(1)
        {
        printf("File does not exist\n");
        printf("Enter new filename\n");
        scanf("%s",str);
        fp=fopen(str,"r");
        if(fp!=NULL)
        break;
        }
    }
    c=getc(fp);
    while(c!=EOF)
    {
        if(c=='\n')
        nl++;
        nc++;
        c=getc(fp);
    }
    printf("no of lines=%d no of char=%d",nl,nc);
}

我的实施有什么问题?。还有其他方法来计算no。线?

4 个答案:

答案 0 :(得分:8)

这取决于你对一条线的定义。如果文件只包含单个字符'a',它是否有一行或没有行?按照程序的逻辑,它有零行。

您可以在while循环结束时在结束}之外添加此行:

if (c != '\n') nl++;

如果最后一个字符不是换行符,则会添加一行。您还应该将c初始化为零,否则如果文件为空,这将导致不可预测的结果。

从其他答案中可以看出,计算文件中的行数意味着什么并不完全清楚。在开始编写代码之前,请确保您非常清楚地了解您正在尝试计算的内容。

答案 1 :(得分:3)

任何文件的最后一行都不需要以换行符\n结尾。因此,您的程序将报告换行符的数量,而不是“行”的数量(这是一个传统定义的概念)。

答案 2 :(得分:3)

<强> [编辑]

最终结果将减少1,因为您将“\ n”计为行尾,而最后一行不会将“\ n”作为行尾。它只会找不到任何角色。 (感谢你指出我的错误@Basile)

因此,对于正确的答案,只需增加while循环外的行数。

@DavidSchwartz认为这个答案不够充分,并指出了明显的答案。因此,为了完整性,我只需添加:(继续solution by David Schwartz)。

答案 3 :(得分:1)

最后一行未计入您的计划,因为它没有遇到\n ..

写出也计算最后一行的逻辑。