计算文件中的行数

时间:2013-06-18 10:09:02

标签: c

我编写了一个c代码来计算文件中的字符数,位数和行数。不幸的是,行数没有给出确切的数。我写了下面的代码。

#include<stdio.h>

void scan();
FILE *fp;

int numbercount=0,textcount=0,spacecount=0,newlinecount=0,specialcount=0;

int main(int argc,char *argv[])
{

 if(argc<2)
 {
     printf("\n Enter the filename through the command line ! ");
 }
 else
 {
    fp=fopen( argv[1],"r");
    if(fp==NULL)
    printf("\n Cannot Open the file ");
   else 
    scan();  
 }
}


void scan()
{

char ch;
while(1)
{
   ch=fgetc(fp);
   if((ch>=65 && ch<=90)||(ch>=97 && ch<=122))
   {
      textcount++;
   }

   else if(ch>=48&&ch<=57)
   {
       numbercount++;
   }

  else if(ch==','||ch=='!'||ch=='?'||ch=='.')
   {
       specialcount++;
   }
   else if(ch==' ')
   {
       spacecount++;

   }
   else if(ch=='\n')
   {
       newlinecount++;

   }
   else if(ch==EOF)
   break;
}

   printf("\n The count of charecters  in the text = %d ",textcount);
   printf("\n The count of numbers in the text = %d ",numbercount);
   printf("\n The count of special charecters in the text = %d",specialcount);
   printf("\n The count of newlines  = %d ",newlinecount);
   printf("\n The number of spaces   = %d \n",spacecount);

 }

我已将输入文本文件内容提供为http://pastebin.com/GXVdqfzT以下,代码将行数计为6而不是11.是否有合适的方法来计算行数。

3 个答案:

答案 0 :(得分:4)

如果对输入有疑问,请查看raw中的数据,使用八进制或十六进制转储程序...也可以显示可读的Ascii。然后你可以看到实际的行。

另外,打开二进制文本文件有时可以帮助理清奇怪的行为。

BUG ALERT:如果最后一行没有行结束符,会发生什么?它发生了。

答案 1 :(得分:3)

如果没有。行数为11,文本编辑器将显示11作为最终行号。它说6表示由于自动换行,单词在下一行流动。将其粘贴到记事本中,无需自动换行,您将看到。

行中没有字符导致单词被包装到下一行(与存储的\n不同并导致换行)。自动换行是编辑器的一个功能,它不依赖于数据(行中的字符)(它会检查行是否超出编辑器窗口的当前宽度并进行换行。)

答案 2 :(得分:2)

该文件确实有6行,它们只是被包裹起来,看起来像是11。