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

C语言嵌套循环判断二维数组字符串首字母为辅音 运行异常求助

代码问题排查与修复方案

你的代码存在以下几处核心错误,是导致运行结果不符合预期的直接原因:

  • 笔误错误:代码中存在iif关键字,应为if,该问题会直接导致编译失败。
  • 辅音判断逻辑错误:你使用了||(逻辑或)连接非元音判断条件,该条件永远为真(任意字符不可能同时等于所有元音字母,必然满足“不是某一个元音”的或条件),所以所有单词都会进入辅音分支,才会输出大量a。需要将||替换为&&(逻辑与),同时调整空值判断的位置。
  • 循环控制错误:你在循环内部手动执行i++,而外层for循环本身会自动对i自增,双重自增会导致跳过后续单词,也会引发数组越界访问未初始化的内存空间。
  • 数组未初始化:inputArray未做初始化,未使用的数组位置存储的是随机垃圾值,你判断inputArray[i][0] == '\0'结束循环的逻辑会失效,导致循环执行满99次。
  • 换行符处理缺失:fgets读取输入时会将末尾的换行符\n一并存入字符串,拆分单词时会被计入最后一个单词的内容。

修正后的完整代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char inputString[999];
    char inputArray[99][99] = {0}; // 初始化数组全为0
    int a = 0;
    int b = 0;

    fgets(inputString, sizeof inputString, stdin);
    // 去除fgets读入的末尾换行符
    inputString[strcspn(inputString, "\n")] = '\0';

    // 拆分单词到二维数组
    for(int i = 0; i <= strlen(inputString); i++) {
        if(inputString[i] == ' ' || inputString[i] == '\0') {
            inputArray[a][b] = '\0';
            a++;
            b = 0;
        } else {
            inputArray[a][b] = inputString[i];
            b++;
        }
    }

    // 处理每个单词
    for (int i = 0; i < 99; i++) {
        if (inputArray[i][0] == '\0') {
            break;
        }
        char first = inputArray[i][0];
        // 判断首字母是否为元音
        int is_vowel = (first == 'a' || first == 'e' || first == 'i' || first == 'o' || first == 'u' ||
                        first == 'A' || first == 'E' || first == 'I' || first == 'O' || first == 'U');
        if (is_vowel) {
            int len = strlen(inputArray[i]);
            int insert_pos = len;
            // 查找标点位置,把moo插在标点前面
            for (int j = 0; j < len; j++) {
                if (inputArray[i][j] == '.' || inputArray[i][j] == ',') {
                    insert_pos = j;
                    break;
                }
            }
            // 后移标点和结束符,插入moo
            for (int j = len; j >= insert_pos; j--) {
                inputArray[i][j + 3] = inputArray[i][j];
            }
            inputArray[i][insert_pos] = 'm';
            inputArray[i][insert_pos + 1] = 'o';
            inputArray[i][insert_pos + 2] = 'o';
        } else {
            // 辅音分支,你的测试输出a可以放在这
            // printf("a");
        }
    }

    // 输出结果
    for (int i = 0; i < 99; i++) {
        if (inputArray[i][0] == '\0') {
            break;
        }
        printf("%s ", inputArray[i]);
    }
    return 0;
}

测试验证

输入yo时,首字母y为辅音,不会进入元音处理逻辑,也不会重复输出大量a,符合预期。
输入apple, orange. test时,输出为applemoo, orangemoo. test ,符合需求要求。

内容的提问来源于stack exchange,提问作者Excal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:04