C语言统计二维字符串元音数量输出错误,求问题原因
问题分析
你的代码共有三个核心错误,直接导致输出异常:
- 变量初始化错误:
vowels_count_2D函数里的计数变量vowels初始值被你设为了string[i][0],也就是取每一行第一个字符的ASCII码值。第一行字符串首字符是'h',对应ASCII码就是104,这就是你输出107的核心原因。 - 返回位置错误:
return vowels写在了第一层for循环内部,代码只统计完第一行就直接返回结果,剩下的两行字符串完全没有参与计算,自然不可能得到正确的总元音数。 - 遍历逻辑冗余:内层循环遍历了整行50个字符,其实C语言字符串以
'\0'结尾,遇到结束符就可以停止遍历,避免无意义的空字符判断。
修正后的代码
#include <stdio.h> // 函数前置声明,避免main调用时找不到声明报错 int vowels_count_2D(const int rows, const int cols, char string[][cols]); int main() { char strings[3][50] = { "hello WORLD", "hELLO", "Hello" }; printf("%d \n", vowels_count_2D(3, 50, strings)); return 0; } int vowels_count_2D(const int rows, const int cols, char string[][cols]) { int vowels = 0; // 计数变量放在循环外初始化,初始值为0 for (int i = 0; i < rows; i++) { // 遇到字符串结束符就停止遍历,不需要跑满cols长度 for (int j = 0; string[i][j] != '\0' && j < cols; j++) { if (string[i][j] == 'a' || string[i][j] == 'e' || string[i][j] == 'i' || string[i][j] == 'o' || string[i][j] == 'u' || string[i][j] == 'A' || string[i][j] == 'E' || string[i][j] == 'I' || string[i][j] == 'O' || string[i][j] == 'U') { vowels++; } } } // 所有行统计完成后再返回总计数 return vowels; }
运行后即可输出预期结果7。
内容的提问来源于stack exchange,提问作者helperman200
相关产品推荐
相关产品推荐

