【问题标题】:Print elements from array of matrices in C?从C中的矩阵数组中打印元素?
【发布时间】:2020-10-30 12:53:16
【问题描述】:

我正在尝试为一个破砖游戏打印一组矩阵的每个字符(完整的消息是你输了)。我是 C 新手,我对使用指针不太自信;我觉得这可能是我问题的根源。为了尝试解决这个问题,我阅读了大量关于如何在 C 中处理字符串的在线指南;但事实上我正在处理一系列字符数组的数组,这使得这项任务变得相当困难。如果您知道如何在 C 中打印字符串矩阵(在另一个数组中),或者您有更好的解决方案,请告诉我!

#include <stdio.h>
#include <unistd.h>
#include <string.h>

#define LETTER_WIDTH 13
#define LETTER_HEIGHT 6

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

char O[LETTER_HEIGHT][LETTER_WIDTH] = {
"  _______ \n",
" /  __   \\\n",
"|  |  |   |\n",
"|  |__|   |\n",
" \\_______/\n"};

char *SENTENCE[2][LETTER_HEIGHT][LETTER_WIDTH] = {*Y, *O};

void printLetter(char letter[LETTER_HEIGHT][LETTER_WIDTH]) {
    for (int i = 0; i < LETTER_HEIGHT; i++) {
        for (int j = 0; j < LETTER_WIDTH; j++) {
            printf("%c", letter[i][j]);
        }
    }
}

void printSentence() {
    for (int i = 0; i < 2; i++) {
        char letter[LETTER_HEIGHT][LETTER_WIDTH];
        strcpy(*letter, **SENTENCE[i]);
        printLetter(letter);
        sleep(1);
    }
}


int main() {
    printSentence();
    return 0;
}

【问题讨论】:

  • @user3386109 - 我现在不关心这个,我现在想要实现的是能够完全打印一个字母,然后再完全打印另一个字母(我将实现这个在诅咒中,这样我就可以在每次打印之前清除屏幕)

标签: arrays c string pointers printf


【解决方案1】:

首先这应该更好

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

char* O[LETTER_HEIGHT] = {
"  _______ \n",
" /  __   \\\n",
"|  |  |   |\n",
"|  |__|   |\n",
" \\_______/\n"};

现在这些是大小为 6 的数组(您必须添加一行,因为 O 现在的高度为 5)包含指向字符数组的指针。下一个

char** SENTENCE[2] = {Y, O};

您之前对这一行做了一些非常奇怪的事情,这将 SENTENCE 定义为指向 char 数组(即 Y 和 O)的指针数组的 2 元素指针数组。 下一个

void printLetter(char** letter) {
    for (int i = 0; i < LETTER_HEIGHT; i++) {
        printf("%s", letter[i]);
    }
}

此函数获取指向 char 数组指针数组的指针。然后进行 6 次并将每个数组打印为字符串。下一个

void printSentence() {
    for (int i = 0; i < 2; i++) {
        printLetter(SENTENCE[i]);
        sleep(1);
    }
}

在这里,您可以使用简单的 for 循环将每个指针从 SENTENCE 传递给 printLetter,该指针指向指向 char 数组(即这些字母)的指针数组。

【讨论】:

    【解决方案2】:

    或者你有更好的解决方案,请告诉我!

    是的,有一个更简单,我认为更好的解决方案,它将SENTENCE 放在一个 2D 数组中并一次性打印它,即使您要使用 ncurses,这也可以让您的工作更容易。

    请注意,使用 ncurses,您可以重新定位光标,以便将每个字母单独打印在一行中,而无需像在 SENTENCE 中尝试那样将它们连接在一起。

    #define LETTER_WIDTH 100
    #define LETTER_HEIGHT 6
    
    char SENTENCE[LETTER_HEIGHT][LETTER_WIDTH] = {
        "__    __   ______ \n",
        "\\ \\  / /  /  __  \\\n",
        " \\ \\/ /   | |  | |\n", 
        "  |  |    | |  | |\n",
        "  |  |    | |__| |\n",
        "  |__|    \\______/\n"};
        
    
    void printSentence()
    {
        for (int i = 0; i < 6; i++)
        {
            printf("%s", SENTENCE[i]);
        }
    }
    

    输出:

    __    __   ______
    \ \  / /  /  __  \
     \ \/ /   | |  | |
      |  |    | |  | |
      |  |    | |__| |
      |__|    \______/
    

    【讨论】:

    • 这似乎工作得很好,但我的部分问题(我没有在这里发布)是我想根据屏幕尺寸缩放字母之间的间距;但这也很酷!
    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多