反向三角形最后一行出现多余星号,求保留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; }
问题分析
核心问题有两个:
- 空格数量偏多:原代码每行打印
a个空格,导致整体缩进偏移,视觉上容易误判星号数量; - 右半部分星号的逻辑关联不够直观:用
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
相关产品推荐
相关产品推荐

