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

C语言打印字符三角形#未紧跟u输出及if-else实现问题咨询

问题原因

  • 第一是数组越界访问:你定义的LEN值为5,字符数组arr_char的合法下标范围是0~4,但原代码判断条件写了j<=LEN,当j=5时会访问ch[5],这已经超出了数组的合法内存范围,读到的是不确定的脏数据(如果脏数据恰好是换行符就会导致输出提前换行)。
  • 第二是分支逻辑冗余:你用了两个独立的if判断,对应的其实是互斥的两种情况,用if-else结构更合理。

修复后的代码(仅使用if-else实现)

#include <stdio.h>
#define LEN 5

int inputNumber() {
    int size;
    printf("Input Size: ");
    scanf("%d",&size);
    printf("===\nTriangle Size is %d\n===\n",size);
    return size;
}

void printTriangle(int size, char ch[]) {
    for(int i = 0; i < size; i++)
    {
        for(int j = 0; j <= i; j++)
        {
            // 下标小于LEN时输出数组里的元音字符
            if(j < LEN)
                printf("%c ",ch[j]);
            // 下标大于等于LEN时输出#
            else
                printf("# ");
        }
        printf("\n");
    }
}

int main() {
    char arr_char[LEN] = {'a','e','i','o','u'};
    int number;
    number = inputNumber();
    printTriangle(number,arr_char);
    return 0;
}

核心修改说明

  • 将原来的j<=LEN改为j < LEN,保证不会访问数组越界的位置
  • 把两个独立的if判断合并为if-else分支,两种情况互斥执行,逻辑更严谨,也符合你要求的仅用基础if-else实现的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:07