计数在文件-C中字符的出现次数



我有一个这样格式的文本文件

Hello:Dad
How:Are
You:Today

我想计算冒号在文件中出现的次数,为此我执行了这个函数:

int NumColon(char txt[]) {
FILE *fp = fopen(txt, "r");
if (fp == NULL) {
exit(1);
}
int count = 0;
char ch;
while (!feof(fp)) {
ch = getc(fp);
if (strcmp(&ch, ":") == 0) {
count++;
}
}
return count;
}

但是当我打印变量count的值时,它是零。然而,如果我在while循环中执行fprint("%s", &ch);,但在if语句之前,我可以清楚地看到,在某些时刻,字符获得了:,所以我不明白发生了什么,为什么它没有进入循环的if语句。

编辑:我也试过使用if (ch == ':'),但仍然无法进入if语句。

你的代码中有多个问题:

  • ch必须被定义为int,以可靠地处理EOF

  • while (!feof(fp))错误。了解为什么"while (!feof (file))"总是错误的?你应该这样写:

    while ((ch - getc(fp)) != EOF)
    
  • strcmp(&ch, ":")是不正确的,因为&ch不是C字符串。你应该用ch == ':'代替。

  • 忘记关闭文件,导致资源泄漏。

下面是修改后的版本:

int NumColon(const char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
return -1;
}
int count = 0;
int c;
while ((c = getc(fp)) != EOF) {
count += (c == ':');
}
fclose(fp);
return count;
}

strcmp要求字符串。字符串是一个以NUL结尾的字符序列。但是&ch是指向单个字符的指针,而不是字符串。

做char比较:if (ch == ':')

相关内容

  • 没有找到相关文章

最新更新