簡體   English   中英

無法在 C 中打印多行字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM