You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:36:06