#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
FILE* fp = NULL;
int count = 0;
int ch;
//判断参数个数是否符合要求
if (argc < 3) {
fprintf(stderr, "No enough parameter.\nUsage: %s <file_name> <count char>\n", argv[0]);
exit(1);
}
//打开文件
fp = fopen(argv[1], "r");
//判断文件是否打开成功
if (fp == NULL) {
perror("fopen");
exit(1);
}
//把文件的第一个字符负值给ch
//这里必须用一个ch来存放fgetc的字符,如果直接用fgetc作为循环条件,并且作为if条件,if判断将不准确,因为到了if这里,fgets又往下走了一个字符,出现一个fgetc,就往下走一个,所以统计的数字会比实际数字少,例如,hello里面的l,只会被统计1个进来,统计进来的是第二个l,因为第一个被while占了,if里面的fgetc其实是第二个l了。
ch = fgetc(fp);
//判断ch是否为EOF
while (ch != EOF) {
//如果ch与第三个参数相等,count+1
if (ch == *argv[2]) {
count++;
}
//把下一个字符负值给ch,再做循环判断
ch = fgetc(fp);
}
//打印输出count
printf("%s has %d %s\n", argv[1], count, argv[2]);
//关闭文件
fclose(fp);
//推出程序
exit(0);
}