[英]Unable to print multi-line strings in C
我正在嘗試打印一系列多行字符串(此處為 ascii 藝術字母),當打印出來時,每個字母的頂部向右移動,而字母的 rest 保持在相同的 position 中。 這是發生的情況的屏幕截圖:
我不知道為什么會這樣,因為我對 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;
}
主要問題是嵌入在您打印的字符串中的換行符。
字母的第一“行”將打印在正確的 position 中,但隨后換行符會將 position 重置為下一行的第一列。
我建議您逐行打印每個“字母”(不帶換行符)。 這可以通過讓每個“字母”成為一個字符數組arrays來幫助,其中每個子數組是字母的一行:
#define LETTER_WIDTH 11
#define LETTER_HEIGHT 6
const char Y[LETTER_HEIGHT][LETTER_WIDTH] = {
"___ __",
"\\ \\__ / /",
" \\ \\ / / ",
" | | | ",
" | | | ",
" |__|__| "
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.