打印ASCII金字塔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印ASCII金字塔相关的知识,希望对你有一定的参考价值。
我试图打印以下ASCII金字塔。
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("
THIS PROGRAM PRINTS ASCII PYRAMID
");
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("
");
}
}
答案
我发现你的代码有两大问题。
第一,你在左右字符之间多打印了一对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("
THIS PROGRAM PRINTS ASCII PYRAMID
");
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("
");
}
}
以上是关于打印ASCII金字塔的主要内容,如果未能解决你的问题,请参考以下文章