我编写了一个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.是否有合适的方法来计算行数。
答案 0 :(得分:4)
如果对输入有疑问,请查看raw中的数据,使用八进制或十六进制转储程序...也可以显示可读的Ascii。然后你可以看到实际的行。
另外,打开二进制文本文件有时可以帮助理清奇怪的行为。
BUG ALERT:如果最后一行没有行结束符,会发生什么?它发生了。
答案 1 :(得分:3)
如果没有。行数为11,文本编辑器将显示11作为最终行号。它说6表示由于自动换行,单词在下一行流动。将其粘贴到记事本中,无需自动换行,您将看到。
行中没有字符导致单词被包装到下一行(与存储的\n
不同并导致换行)。自动换行是编辑器的一个功能,它不依赖于数据(行中的字符)(它会检查行是否超出编辑器窗口的当前宽度并进行换行。)
答案 2 :(得分:2)
该文件确实有6行,它们只是被包裹起来,看起来像是11。