【发布时间】:2020-10-29 06:28:14
【问题描述】:
我正在尝试打印一系列多行字符串(此处为 ascii 艺术字母),当打印出来时,每个字母的顶部向右移动,而其余字母保持在同一位置。这是发生的屏幕截图:
我不知道为什么会这样,因为我对 C 还很陌生;如果您对此有任何了解,请分享!
#include <stdio.h>
#include <curses.h>
typedef const char letter[];
letter Y =
"___ __\n
\\ \\__ / /\n
\\ \\ / /\n
| | |\n
| | |\n
|__|__|\n";
letter O =
"_______ \n
/ __ \\\n
| | | |\n
| |__| |\n
\\_______/\n";
letter U =
" __ __ \n
/ | | \\\n
| | | |\n
| \\_/ |\n
\\_________/\n";
letter L =
" _\n"
"| |\n"
"| |\n"
"| |__\n"
"|____/\n";
letter S =
" _________\n"
"/ _____/\n"
"\\_____ \\\n"
"/ \\\n"
"/_______ /\n"
" \\/\n";
letter T =
"___________\n"
"\\__ ___/\n"
" | |\n"
" | |\n"
" |___|\n";
letter EXCLAMATION_POINT =
"_________\n"
"\\\\\\\\|////\n"
" \\\\\\|///\n"
" \\\\|//\n"
" \\|/\n"
" ***\n"
" ***\n"
" *\n";
const char *MESSAGE[] = {Y, O, U, L, O, S, T, EXCLAMATION_POINT};
int main() {
initscr();
cbreak();
noecho();
int maxY, maxX;
getmaxyx(stdscr, maxY, maxX);
int spacingPerLetter = maxX / 8;
for (int i = 0; i < 8; i++) {
mvprintw(maxY / 2, spacingPerLetter * (i + 1), MESSAGE[i]);
refresh();
getch();
clear();
}
endwin();
return 0;
}
【问题讨论】:
-
字母
y、o和u在换行符后有很多空格。其他人没有。为什么会有差异? -
mvprintw在打印之前移动到行的中间。然后它打印 MESSAGE[i] (其中包括几行文本)。所以空行来自maxY / 2。将其更改为 0。 -
你不能像这样破坏字符串声明。 (至少,在我曾经使用过的任何 C 编译器中都没有。)在您对 Y、O 和 U 的定义中,您应该在每个
\n之后有一个右双引号,并在每一行的开头有一个左引号.
标签: c string multiline curses multilinestring