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

C语言字符输出异常求助:声明'A'却输出'B',树形图案不符预期

问题排查与代码修正

咱们来一步步拆解你遇到的问题:

1. 首行字符错误(出现'B'而非'A')

原代码里,letra的更新时机完全错了:你在输出当前行之前就提前让字符自增了。而且第一次循环(i=0)时,内部循环的条件j < i(也就是j < 0)永远不成立,导致第一行完全没有输出字符,紧接着letra就从'A'变成了'B',后续行自然就从'B'开始了。

2. 行数多余的问题

外层循环写的是for (int i = 0; i < tam +1; i++),这会让循环执行tam +1次——比如输入3的话,会跑4次循环,自然多输出一行。

3. 内部循环的冗余逻辑

if (j < i)这个判断完全没必要,反而把输出逻辑搞复杂了。我们的需求是第k行输出k个对应字符,直接控制循环次数输出即可。


修正后的代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int tam;
    char letra = 'A';
    printf("Tree size?\n");
    scanf("%d", &tam);
    
    // 外层循环执行tam次,对应输出tam行
    for (int i = 0; i < tam; i++){
        // 每行输出i+1个当前字符(第1行1个,第2行2个...)
        for (int j = 0; j < i + 1; j++) {
            printf("%c", letra);
        }
        // 输出完当前行后,再切换到下一个字符
        letra++;
        printf("\n");
    }
    return 0;
}

代码解释

  • 外层循环改为i < tam,确保只输出tam行;
  • 去掉了多余的if判断,直接让内部循环输出i+1个当前字符(因为i从0开始,对应第1行到第tam行);
  • 保持letra在每行输出完成后再自增,确保首行输出的是初始的'A'。

测试输入3的话,输出就是:

A
BB
CCC

完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:42