Невозможно напечатать многострочные строки в C - PullRequest
1 голос
/ 08 июля 2020

Я пытаюсь напечатать серию многострочных строк (здесь буквы ascii art), и при их распечатке верх каждой буквы перемещается вправо, а остальная часть буквы остается в том же положении. Вот скриншот того, что происходит: Изображение ошибки

Я не знаю, почему это происходит, поскольку я новичок в 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;
}

1 Ответ

1 голос
/ 08 июля 2020

Основная проблема заключается в том, что новая строка встроена в строки, которые вы печатаете.

Первая «строка» букв будет напечатана в правильном положении, но затем новая строка вернет позицию в первый столбец на следующей строке.

Я рекомендую вам выводить каждую «букву» построчно (без символов новой строки). Этому может помочь, если каждая «буква» будет массивом массивов символов, где каждый подмассив - это одна строка буквы:

#define LETTER_WIDTH   11
#define LETTER_HEIGHT   6

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