【问题标题】:Unable to print multi-line strings in C无法在 C 中打印多行字符串
【发布时间】: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;
}

【问题讨论】:

  • 字母you在换行符后有很多空格。其他人没有。为什么会有差异?
  • mvprintw 在打印之前移动到行的中间。然后它打印 MESSAGE[i] (其中包括几行文本)。所以空行来自maxY / 2。将其更改为 0。
  • 你不能像这样破坏字符串声明。 (至少,在我曾经使用过的任何 C 编译器中都没有。)在您对 Y、O 和 U 的定义中,您应该在每个 \n 之后有一个右双引号,并在每一行的开头有一个左引号.

标签: c string multiline curses multilinestring


【解决方案1】:

主要问题是嵌入在您打印的字符串中的换行符。

字母的第一“行”将打印在正确的位置,但随后换行符会将位置重置为下一行的第一列。

我建议您逐行打印每个“字母”(不带换行符)。这可以通过让每个“字母”成为一个数组字符的数组来帮助,其中每个子数组都是字母的一行:

#define LETTER_WIDTH   11
#define LETTER_HEIGHT   6

const char Y[LETTER_HEIGHT][LETTER_WIDTH] = {
    "___      __",
    "\\ \\__ / /",
    " \\ \\ / / ",
    " |  |  |   ",
    " |  |  |   ",
    " |__|__|   "
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2021-07-12
    • 2021-10-08
    • 2015-11-16
    相关资源
    最近更新 更多