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
相关产品推荐
相关产品推荐

