我们被要求创建一个程序,提供一个表格,用户可以在其中选择是否对字符、单词、句子、行或以上所有内容进行计数。这需要为每个实用程序提供单独的功能。我的行计数器工作正常,但由于某种原因,字符计数器函数不断返回 0。该程序不完整,但我对字符计数器感到非常沮丧。
#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;
}
我知道缺乏评论并不理想,但我的问题非常具体。不是寻找答案,只是一些建议来为我指明正确的方向。
最佳答案
sp1
是一个结构,其中包含您在正在读取的文件中的位置。在 countLines()
的内部循环之后,该字段将指向文件末尾。在同一流上执行其他读取操作之前,您需要调用 rewind(sp1);
,这样它将再次开始工作。
不要犹豫,看看man rewind
!
关于c - 使用 C 程序来计算字符、单词、句子、行或以上所有内容。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110565/