如何在两个三角形输出间加换行,且末尾三角形后无换行?
解决三角形输出间换行、末尾无多余换行的问题
需求说明:处理多组输入数字,偶数对应输出倒三角形,奇数对应输出正三角形,要求两个三角形输出之间空一行,但最后一个三角形的输出末尾不能有多余换行。
示例输入
4 5
示例输出
******* ***** *** * * *** ***** ******* *********
原代码问题分析
当前代码在每个三角形输出后都执行printf("\n");,导致最后一个三角形末尾也会多出一行空行,不符合需求。
修改方案
核心思路是:通过标记变量判断当前是否为第一个输出的三角形,非第一个三角形输出前先打印换行,既保证了三角形间的分隔,又避免最后末尾出现多余换行。
修改后的完整代码:
#include <stdio.h> #include <stdlib.h> void printDownT(int n){ for (int i = n; i >= 1; i--) { for (int j = 1; j <= n - i; j++) { printf(" "); } for (int k = 1; k <= 2 * i - 1; k++) { printf("*"); } printf("\n"); } } void printUpT(int n){ for (int i = 1; i <= n; i++) { for (int j = 1; j <= n - i; j++) { printf(" "); } for (int k = 1; k <= 2 * i - 1; k++) { printf("*"); } printf("\n"); } } int main(){ int num; int first = 1; // 标记是否为第一个输出的三角形 while (scanf("%d", &num) != EOF){ if (!first) { // 非第一个三角形,先打印换行分隔 printf("\n"); } if (num % 2 == 0){ printDownT(num); } else{ printUpT(num); } first = 0; // 输出后更新标记 } return 0; }
修改要点
- 新增
first标记变量,初始值为1,表示第一个三角形不需要前置换行 - 每次循环判断:若不是第一个输入,先打印换行再输出三角形,实现三角形间的分隔
- 移除原代码中每个三角形后的
printf("\n");,因为三角形内部的每行已自带换行,无需额外添加
内容的提问来源于stack exchange,提问作者user22881508
相关产品推荐
相关产品推荐

