如何为菱形添加星号边框?C语言代码调试求助
菱形星号边框实现问题
我需要为菱形添加星号边框,输入值为9时的预期输出如下:
* *.* *. .* *. . .* *. . . .* *. . . . .* *. . . .* *. . .* *. .* *.* *
以下是无边框的菱形代码:
int main() { int d = 0; scanf("%d", &d); int d2 = (d / 2) + 1; for(int i = 1; i <= d2;i++) { for(int c = 1; c<=d2-i;c++) { printf(" "); } for(int j = 0;j < i;j++) { printf("."); printf(" "); } printf("\n"); } for(int i = d2-1; i >= 1;i--) { for(int c = 1; c<=d2-i;c++) { printf(" "); } for(int j = i;j > 0;j--) { printf("."); printf(" "); } printf("\n"); } }
上述无边框代码的输出如下:
. . . . . . . . . . . . . . . . . . . . . . . . .
我自己编写了带边框的代码,但无法正常运行,空格和点的显示均不正确:
#include <stdio.h> #include <stdlib.h> int main() { int d = 0; scanf("%d", &d); int d2 = (d / 2) + 1; int s = 0; // Printing the upper half of the diamond and the frame for(int i = 1; i <= d2; i++) { for(int c = 1; c <= d2 - i; c++) { printf(" "); } printf("*"); if (i > 1) { for (int j = 0; j < i - 1; j++) { printf("."); printf(" "); } printf("*"); } printf("\n"); } // Printing the lower half of the diamond and the frame for(int i = d2 - 1; i >= 1; i--) { for(int c = 1; c <= d2 - i; c++) { printf(" "); } printf("*"); if (i > 1) { for (int j = i - 2; j >= 0; j--) { printf("."); printf(" "); } printf("*"); } printf("\n"); } }
上述代码的输出如下:
* *. * *. . * *. . . * *. . . . * *. . . * *. . * *. * *
问题分析
你的代码问题集中在中间内容的输出逻辑:
- 上半部分
i>1时,循环输出的.会在最后一个点后多一个空格,导致右侧星号错位; - 下半部分错误地将循环起始值设为
i-2,直接减少了中间点的数量,同时同样存在空格冗余问题。
修复后的代码
#include <stdio.h> int main() { int d = 0; scanf("%d", &d); int d2 = (d / 2) + 1; // 打印菱形上半部分(含中间行) for(int i = 1; i <= d2; i++) { // 前置空格 for(int c = 1; c <= d2 - i; c++) { printf(" "); } printf("*"); if (i > 1) { // 先输出第一个点,后续点前加空格 printf("."); for (int j = 1; j < i - 1; j++) { printf(" ."); } printf("*"); } printf("\n"); } // 打印菱形下半部分 for(int i = d2 - 1; i >= 1; i--) { // 前置空格 for(int c = 1; c <= d2 - i; c++) { printf(" "); } printf("*"); if (i > 1) { printf("."); for (int j = 1; j < i - 1; j++) { printf(" ."); } printf("*"); } printf("\n"); } return 0; }
修复说明
- 调整中间内容输出逻辑:先输出第一个
.,后续每个点前加空格,避免最后一个点后出现冗余空格,保证右侧星号和点紧密衔接; - 统一上下半部分的中间点循环逻辑,修正下半部分的循环起始值错误,确保点的数量符合预期;
- 移除了不必要的
stdlib.h头文件,精简代码结构。
运行修复后的代码,输入9即可得到预期的菱形边框效果。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

