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

