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

C语言星号图案下半部分无法打印问题求助

解决星号图案后半部分无法正常输出的问题

我来帮你排查一下这个问题~你的星号图案后半部分打不出星号,核心是循环条件的逻辑出了问题,咱们一步步理清楚:

原代码的问题分析

  1. 循环结束后i的值不符合预期:
    第一个for(i=1;i<=4;i++)循环执行完后,i会自增到5才退出循环,这时候进入if(i>4)判断,确实会执行里面的代码,但问题出在星号的循环条件上。
  2. 星号循环条件永远不成立:
    你写的for(m=1;m<=4-i;m++),当i=5时,4-i=-1,循环条件m<=-1永远为假,所以这个循环根本不会运行,自然打不出星号。
  3. 用if包裹后半部分逻辑不合理:
    你需要的是多行倒三角图案,应该用一个反向的for循环来遍历行数,而不是靠单次if判断。

修正后的代码

#include <stdio.h>

int main() {
    int i, j, k;
    // 上半部分:从1个星递增到4个星
    for (i = 1; i <= 4; i++) {
        // 打印前置空格,每行减少1个
        for (j = 1; j <= 4 - i; j++) {
            printf(" ");
        }
        // 打印星号,每行增加1个
        for (k = 1; k <= i; k++) {
            printf("*");
        }
        printf("\n");
    }
    // 下半部分:从3个星递减到1个星
    for (i = 3; i >= 1; i--) {
        // 空格打印逻辑和上半部分一致,保证对称
        for (j = 1; j <= 4 - i; j++) {
            printf(" ");
        }
        // 星号数量和上半部分对应递减
        for (k = 1; k <= i; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

修正说明

  • 把原来的if块替换成了反向循环for(i=3;i>=1;i--),这样就能生成3行倒三角,和上半部分的4行正三角组成完整的对称图案。
  • 空格和星号的打印逻辑和上半部分完全对齐,避免出现间隙或不对称的情况。
  • 去掉了多余的变量m,简化了代码结构。

最终输出效果

*
  **
 ***
****
 ***
  **
   *

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:26:43