使用C程序计算字符、单词、句子、行或以上所有内容。
我们被要求创建一个程序,该程序提供一个表格,用户可以在其中选择是计数字符、单词、句子、行还是以上所有内容。这要求每个实用程序具有单独的功能。我的行计数器工作得很好,但由于某种原因,字符计数器函数一直返回0。该计划是不完整的,但我对字符计数器感到非常失望使用C程序计算字符、单词、句子、行或以上所有内容。,c,function,C,Function,我们被要求创建一个程序,该程序提供一个表格,用户可以在其中选择是计数字符、单词、句子、行还是以上所有内容。这要求每个实用程序具有单独的功能。我的行计数器工作得很好,但由于某种原因,字符计数器函数一直返回0。该计划是不完整的,但我对字符计数器感到非常失望 #include <stdlib.h> #define WHT_SPC\ (cur == ' ' || cur == '\n' || cur == '\t') int countLines(sp1); int w
#include <stdlib.h>
#define WHT_SPC\
(cur == ' ' || cur == '\n' || cur == '\t')
int countLines(sp1);
int wordCounter(sp1);
int characterCounter(sp1);
int sentenceCounter (sp1);
int main()
{
int lineCount = 0;
int wordCount = 0;
int characterCount= 0;
int sentenceCount = 0;
char filename[100];
FILE* sp1;
printf("Enter Filename to be read: ");
gets(filename);
sp1 = fopen(filename,"r");
lineCount = countLines(sp1);
characterCount = characterCounter(sp1);
printf("Number of Lines: %d\n",lineCount);
printf("Number of Characters: %d\n",characterCount);
fclose(sp1);
return 0;
}
int countLines(sp1)
{
int curCh;
int preCh;
int countLn = 0;
while ((curCh = fgetc(sp1)) != EOF)
{
if (curCh == '\n')
countLn++;
preCh = curCh;
}
if (preCh != '\n')
countLn++;
return countLn;
}
int characterCounter(sp1)
{
int chr;
int countCh = 0;
while ((chr = fgetc(sp1)) != EOF)
{
if (chr != 'n' && chr != ' ')
countCh++;
}
return countCh;
}
#包括
#定义WHT\U SPC\
(cur=''| | cur='\n'| | cur=='\t')
整数计数线(sp1);
int字计数器(sp1);
int字符计数器(sp1);
int语句计数器(sp1);
int main()
{
int lineCount=0;
int字数=0;
int characterCount=0;
int-sentenceCount=0;
字符文件名[100];
文件*sp1;
printf(“输入要读取的文件名:”);
获取(文件名);
sp1=fopen(文件名为“r”);
lineCount=countLines(sp1);
characterCount=characterCounter(sp1);
printf(“行数:%d\n”,行数);
printf(“字符数:%d\n”,characterCount);
fclose(sp1);
返回0;
}
整数计数行(sp1)
{
int-curCh;
int-preCh;
int countLn=0;
而((curCh=fgetc(sp1))!=EOF)
{
如果(curCh='\n')
countLn++;
preCh=curCh;
}
如果(preCh!='\n')
countLn++;
返回计数ln;
}
int字符计数器(sp1)
{
int-chr;
int countCh=0;
而((chr=fgetc(sp1))!=EOF)
{
如果(chr!=“n”&&chr!=“n”)
countCh++;
}
返回计数;
}
我理解缺乏评论并不理想,但我的问题非常具体。不是寻找答案,只是给我一些建议,告诉我正确的方向
sp1
是一种结构,其中包含您在正在阅读的文件中的位置。在countLines()
的内部循环之后,此字段将指向文件的结尾。您需要调用<代码>倒带(sp1)在对同一个流执行其他读取操作之前,请执行code>,这样它将重新开始工作。
不要犹豫,看看吧 fgetc()
递增文件指针
因此,characterCounter()
在countLines()
之后缩放的characterCounter()必须返回0,因为它遇到的第一个字符是EOF
尝试使用fseek(sp1,0L,SEEK\u SET)
beforecharacterCounter()
在开始字符计数之前,您没有打开文件。而缺少注释与此代码无关,甚至与编译无关(在任何函数decls/defs中都没有针对sp1
的类型)。非常感谢。我知道注释与编译没有任何关系,但有人告诉我这是一个很好的做法。最好只对文件进行一次遍历,并计算字符、单词和行数,等等。倒带并再次读取文件是低效的。@starkI知道这样会更好,但分配给他的任务是他希望我们这样做。相信我,我认为作业本身并不现实,但你能做些什么。非常感谢你的反馈。倒带功能对我来说是新的,所以我只有一个问题。我必须在每个函数的末尾或开头倒带它吗?Nevermind只是测试了一下,发现你可以把它放在每个函数之前,它工作正常。再次感谢。现在一切正常,请毫不犹豫地将您的问题标记为已结束;-)