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

反向三角形最后一行出现多余星号,求保留do-while循环的修复方案

修复反向三角形最后一行多余星号问题(保留do-while循环结构)

你的代码使用do-while循环绘制反向三角形,但最后一行出现了多余星号,以下是保留do-while结构的修复方案。

原代码

#include <stdio.h>

int main(){
    int rows, rows1, a, b, c, d;
    
    printf("Enter number of rows:");
    scanf("%d", &rows);
    
    rows1 = rows;
    
    a = 1;
    do{
        b = 1;
        do{
            printf(" ");
            b++;
        }while(b <= a);
       
        c = 1;
        do{
            printf("*");
            c++;
        }while(c <= rows1);

        c = rows - a;
        do{
            printf("*");
            c--;
        }while(c >= 1);
        
        rows1--;       
        printf("\n");
        a++;
    }while(a <= rows);
    
    return 0;
}

问题分析

核心问题有两个:

  1. 空格数量偏多:原代码每行打印a个空格,导致整体缩进偏移,视觉上容易误判星号数量;
  2. 右半部分星号的逻辑关联不够直观:用rows - a计算右半星数,虽然多数场景下等价于rows1-1,但变量关联容易引发边界错误。

修复后的代码

#include <stdio.h>

int main(){
    int rows, rows1, a, b, c;
    
    printf("Enter number of rows:");
    scanf("%d", &rows);
    
    rows1 = rows;
    
    a = 1;
    do{
        // 打印缩进空格:每行空格数为a-1个
        b = 1;
        do{
            printf(" ");
            b++;
        }while(b < a);
       
        // 打印左半部分星号
        c = 1;
        do{
            printf("*");
            c++;
        }while(c <= rows1);

        // 打印右半部分星号:数量为rows1-1个,与左半星数形成对称
        c = rows1 - 1;
        do{
            printf("*");
            c--;
        }while(c >= 1);
        
        rows1--;       
        printf("\n");
        a++;
    }while(a <= rows);
    
    return 0;
}

修复说明

  • 调整空格循环条件为b < a,确保每行缩进空格数为a-1,匹配反向三角形的缩进逻辑;
  • 将右半部分星号的初始值改为rows1 - 1,直接关联当前行的星数基准,逻辑更清晰,避免边界错误;
  • 移除未使用的变量d,简化代码结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:40:26