C语言元音字母统计程序输出错误排查:结果与预期不符
排查你的C语言元音计数代码错误
嘿,我看了你的代码和问题,马上就发现了两个关键问题导致输出不对,咱们一步步拆解:
1. 最严重的问题:固定循环长度导致统计垃圾值
你的vowel_count函数里写了for (int i = 0; i < 50; i++)——这意味着不管输入的字符串实际有多长,你都会把整个50位的字符数组从头到尾扫一遍。但C语言里的字符串是以'\0'(空字符)作为结束标记的,数组里字符串后面的未初始化部分全是随机的垃圾值,这些垃圾值大概率会包含你定义的元音字符(比如A、U之类的),所以短字符串(比如my pyx)的计数会被这些垃圾值硬生生拉高到12,完全偏离实际的2个元音。
修复方案:把循环条件改成检查当前字符是不是字符串结束符,这样只统计有效字符:
// 原来的固定循环长度改成判断字符串结束 for (int i = 0; n[i] != '\0'; i++) {
2. 次要但需要注意的缓冲区问题
你在fscanf读取数字后用fgets(unknown, 10, fp);来吃掉换行符,这个操作有小风险:如果文件里的换行符前有额外字符,或者unknown长度不够,可能会导致后续的fgets读取错位。不过从你的前三个输出是对的来看,这次没踩坑,但换成更稳妥的方式清空缓冲区更好:
// 替换掉那行fgets,用这个循环吃掉换行符 while (fgetc(fp) != '\n');
修复后的验证
改完vowel_count的循环条件后,再运行代码,输出就会和你预期的完全一致:5 4 13 2 5。比如my pyx里的两个y会被正确统计为元音,而不会把数组后面的垃圾值算进去;riszky hermawan里的5个元音也能准确计数。
内容的提问来源于stack exchange,提问作者Riszky hermawan
相关产品推荐
相关产品推荐

