我试图创建一个程序,从一个文件中读取并统计文件中每个字母字符的出现次数。下面是我到目前为止得到的结果,但是返回的计数(存储在计数器数组中)高于预期
无效计数字母(常量字符*文件名,整数计数器[26]){
FILE*in_FILE=fopen(文件名为“r”);
常量字符字母表[]=“abcdefghijklmnopqrstuvwxyz”;;
if(in_file==NULL){
printf(错误(计数字母):无法打开文件%s\n文件名);
回来
}
字符行[200];
while(fgets(line,sizeof(line),in_file)!=NULL){//继续读取行,直到没有任何内容可读取为止
对于(int pos=0;pos<;sizeof(line);pos++){//遍历行中的每个字符。。。
if(isalpha(行[pos]){//如果当前字符不是字母顺序,则跳过检查并增加位置
对于字母表中的每个字符(inti=0;i<;26;i++){/
if(tolower(line[pos])==tolower(ALPHABET[i])//大写和小写的计数相同
计数器[i]++;//为行中的每个匹配项增加计数器中的当前元素
}
}
}
}
fclose(在_文件中);
回来
}
在for(int pos=0;pos<;sizeof(line);pos++)中,sizeof(line)的计算结果是整个数组行的大小,而不是最近的fgets调用填充的部分。因此,在长行之后,循环会重复计算数组中读取短行时留下的字符数
修改循环以仅遍历最近由fgets填写的行的部分。您可以在看到空字符时退出循环