-2

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

#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。是否有合适的方法来计算行数。

4

3 回答 3

4

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

此外,以二进制打开偶数文本文件有时可以帮助解决奇怪的行为。

BUG ALERT:如果最后一行没有行尾字符会怎样?它发生了。

于 2013-06-18T10:17:01.120 回答
3

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

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

于 2013-06-18T10:17:42.210 回答
2

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

于 2013-06-18T10:11:48.850 回答