修复C语言for循环打印指定宽度菱形图案的代码问题
C语言菱形图案输出代码修复方案
现有代码问题排查
- 上半部分每行长度不足:原有内容循环仅到
2*i-1,少了一个字符位置,导致行尾的\无法打印 - 上半部分前置空格多1位:空格循环逻辑输出
n-i+1个空格,比正确值多1,导致上半部分整体右偏 - 下半部分行数缺失:原有下半部分循环从
i = n-1开始,比需求少1行,缺少最宽的下半部分首行 - 下半部分字符逻辑颠倒:下半部分应该行首打印
\、行尾打印/,原有逻辑和上半部分一致,图案颠倒 - 下半部分前置空格计数错误:空格逻辑多输出1个空格,导致下半部分整体右偏
修复后完整代码
#include <stdio.h> int main() { int n, i, j, l; printf("Enter width: "); scanf("%d", &n); // 打印上半部分 for (i = 1; i <= n; i++) { // 打印前置空格 for (j = i; j < n; j++) { printf(" "); } // 打印/ \结构 for (l = 1; l <= 2 * i; l++) { if (l == 1) printf("/"); else if (l == 2 * i) printf("\\"); else printf(" "); } printf("\n"); } // 打印下半部分 for (i = n; i >= 1; i--) { // 打印前置空格 for (j = i; j < n; j++) { printf(" "); } // 打印\ /结构 for (l = 1; l <= 2 * i; l++) { if (l == 1) printf("\\"); else if (l == 2 * i) printf("/"); else printf(" "); } printf("\n"); } return 0; }
核心修改说明
- 上半部分内容循环长度从
2*i-1调整为2*i,匹配每行需要的2个符号+中间空格的总长度 - 上半部分空格循环的终止条件从
j <=n改为j <n,减少1个多余空格 - 下半部分循环起始值从
n-1改为n,补全缺失的首行 - 下半部分的打印逻辑调整,行首输出
\,行尾输出/,符合下半部分图案要求 - 下半部分空格逻辑和上半部分对齐,保证左右对齐效果
内容的提问来源于stack exchange,提问作者casual
相关产品推荐
相关产品推荐

