c-打印ASCII金字塔



我正在尝试打印以下ASCII Pyramid。

A B C D E F G F E D C B A
A B C D E F   F E D C B A 
A B C D E       E D C B A 
A B C D           D C B A 
A B C               C B A 
A B                   B A 
A                       A 

但我得到了以下输出:

A B C D E F G       F E D C B A
A B C D E F     F E D C B A 
A B C D E         E D C B A 
A B C D             D C B A 
A B C                 C B A 
A B                     B A 
A                         A

第一行搞砸了。有人能帮我得到想要的输出吗?

这是代码:

#include <stdio.h>;
#include <stdlib.h>;
void main() {
unsigned long int x, y, z;
printf("nTHIS PROGRAM PRINTS ASCII PYRAMID n");
char c;
y = 71;
z = 12;
for (int i = 0; i < 7; i++) {
for (int j = 65; j <= y; ++j) {
printf("%c ", j); /*prints left side of the string */
}
for (int k = 0; k < 2 * i; ++k) {
printf("  "); /*prints spaces between the strings */
}
for (int l = y; l > 64; l--) {
if (l == 71) {
for (int p = 70; p > 64; p--)
printf("%c ", i);
} else
printf("%c ", l); /* prints right part of the string */
};
y = y - 1;
printf("n");
}
}

我在您的代码中发现了两个主要问题。

首先,在左右字符之间多打印一对2个空格。

其次,

for (int p = 70; p > 64; p--)
printf("%c ", i);

部分是发出垃圾(控制字符(和额外的空格。

这个程序(也进行了一些小的修复(似乎运行得很好。

/* remove extra semicolons */
#include <stdio.h>
#include <stdlib.h>
/* use standard return type */
int main() {
unsigned long int x, y, z;
printf("nTHIS PROGRAM PRINTS ASCII PYRAMID n");
char c;
y = 71;
z = 12;
for (int i = 0; i < 7; i++) {
for (int j = 65; j <= y; ++j) {
printf("%c ", j); /*prints left side of the string */
}
/* reduce number or pairs of spaces to print */
for (int k = 0; k < 2 * i - 1; ++k) {
printf("  "); /*prints spaces between the strings */
}
for (int l = y; l > 64; l--) {
/* remove extra printing */
if (l != 71)
printf("%c ", l); /* prints right part of the string */
};
y = y - 1;
printf("n");
}
}

最新更新