我正在测试某些功能以进行分配,但是我在使用这些功能时遇到了麻烦:
int countall(*FILE f) {
int value = 0;
char ch;
while((ch = fgetc(arquivo)) != EOF) {
value++;
}
return value;
}
int countchar(FILE *f) {
int count = 0;
char ch;
while ((ch = fgetc(f)) != EOF) {
if (ch >= 'A' && ch <= 'Z')
count++;
}
return count;
}
它们执行几乎完全相同的操作,但是当我将函数返回到 int 变量并尝试在stdout上打印它们时,只有第一个调用的函数显示正确的值。第二个总是显示0。如何解决?
答案 0 :(得分:1)
如果到达文件末尾,此条件将不会“神奇地”改变。这两个函数都读取到最后,因此,如果要在同一打开的文件上调用它们,则必须显式重置文件指针:
rewind(f);
有关定位文件指针的更多信息,请参见manpage on fseek
。
更多说明:
FILE *
是stdin
,则不是这种情况。ch
声明为char
,可以将int
返回的所有fgetc()
转换为char
。这将导致在检查EOF
时出现问题,很可能是您错误地将某些正常字符解释为文件结尾。int
也不是计算尺寸的好选择。我建议至少使用size_t
或unsigned long long
。FILE *
用作参数。