就像标题所说我在C中编写一个字数克隆程序,但在其中一个案例中没有正确计算。 我有.txt文件,该程序工作正常,但如果我使用以下命令
linux>./wordcountclone < file.txt
它只占一半的话。 我做错了吗? 如果我使用例如
linux>./wordcountclone file.txt
或
linux>./wordcountclone -l -d file.txt
工作正常。 这里是使用
的函数void fileO(FILE * name, int car, int word, int lin, int dig){
int c , nl, np, nc, nd, state;
state = OUT;
nl = nc = nd = 0;
np = -1;
c = fgetc(name);
while (c != EOF){
c = fgetc(name);
nc++;
if(nc > INT_MAX)
return;
if (c == '\n')
nl++;
if (c > 47 && c < 58)
nd++;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
if (state == OUT) {
state = IN;
np++;
}
}
if(lin !=0)
printf("lines %d ", nl);
if(word != 0)
printf("words %d ", np);
if(dig !=0)
printf("digits %d ", nd);
if(car != 0)
printf("chars %d ", nc);
printf("\n");
}
我正在使用的.txt文件包含以下文本
the cat sat on the mat
the dog jumped over the moon
答案 0 :(得分:2)
这里至少有两个问题:
您总是跳过连续两次执行c = fgetc(name);
的第一个字符 - 一个在while
之前,然后在循环内。
state
逻辑不正确 - 如果您在仅包含空格的文件上运行此逻辑,它仍会计算单词。
另外,有几点建议:
而不是if (c > 47 && c < 58)
您可以if ('0' <= c && c <= '9')
或使用isdigit()
使用isspace()
检查空白