C语言实现同时打印左半与右半金字塔星号图案
问题分析
你现在写的代码运行后会先输出完整的左对齐直角三角,再输出完整的右对齐直角三角,两个图案上下排布,达不到你要的同一次输出里左右并排的效果。另外代码里还存在两个小问题:一是引入了全程没用到的非标准头文件<conio.h>,二是右半三角的循环外层套了一层无意义的独立花括号,属于冗余写法。
实现思路
要让两个三角左右并排,不需要拆成两个独立的大循环逐块打印,只要把逻辑改成逐行打印即可:每一行里按顺序输出左半三角内容、两个三角的间隔、右半三角内容,整行内容输出完成后再换行,就能得到并排的效果。
修正后的代码
#include <stdio.h> int main() { int i, j, rows; // 两个三角之间的间隔宽度,可自行调整 const int gap = 3; printf("Enter a number to define the rows: \n "); scanf("%d", &rows); printf("\n"); for (i = 1; i <= rows; ++i) { // 打印当前行的左半三角星号 for (j = 1; j <= i; ++j) { printf("*"); } // 打印两个三角之间的间隔 for (j = 1; j <= gap; ++j) { printf(" "); } // 打印当前行右半三角的前置空格 for (j = i; j < rows; ++j) { printf(" "); } // 打印当前行右半三角的星号 for (j = 1; j <= i; ++j) { printf("*"); } // 整行内容打印完成后换行 printf("\n"); } return 0; }
运行效果参考
输入行数为5时,输出结果如下:
* * ** ** *** *** **** **** *********
补充说明
- 删掉了未使用的
<conio.h>头文件,这个头是Windows平台旧编译器专属的非标准库,留着会导致代码在其他编译环境下无法正常编译 - 去掉了无意义的冗余花括号,代码结构更清晰
- 如果你不需要两个三角之间留间隔,把gap的值改成0即可
内容的提问来源于stack exchange,提问作者Creeep Creeeper
相关产品推荐
相关产品推荐

