首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于用C语言打印8x8网格的帮助

关于用C语言打印8x8网格的帮助
EN

Stack Overflow用户
提问于 2011-03-06 15:15:19
回答 3查看 2.2K关注 0票数 1

我需要帮助打印一个8x8网格在C。

典型的1x1网格应该如下所示:

代码语言:javascript
运行
复制
+----+
|    |
|    | 
|    |
+----+

但是,即使我检查了所有可能导致问题的因素,我也不能理解。

你们能检查一下代码并告诉我问题出在哪里吗?

代码语言:javascript
运行
复制
        int main() {

    row_count = 2;
    col_count = 2;

    strcpy(row0NoX, "-----+");
    strcpy(row1NoX, "     |");
    strcpy(row2NoX, "     |");
    strcpy(row3NoX, "     |");
    strcpy(row4NoX, "-----+");

    printf("Welcome to the Checkerboard program!\n");

    for (row = 0; row < row_count; row++) {

        for (tiny_row = 1; tiny_row < N_ROWS; tiny_row++) {

            printf("%c", row0NoX[strlen(row0NoX)-1]);
            printf("%c", row1NoX[strlen(row1NoX)-1]);
            printf("%c", row2NoX[strlen(row2NoX)-1]);
            printf("%c", row3NoX[strlen(row3NoX)-1]);
            printf("%c", row4NoX[strlen(row4NoX)-1]);


            for (col = 0; col < col_count; col++) {

                switch (checkerboard[row][col]) {
                    case 0:
                        switch (tiny_row) {
                            case 1:
                                printf("%s", row0NoX);
                                break;
                            case 2:
                                printf("%s", row1NoX);
                                break;
                            case 3:
                                printf("%s", row2NoX);
                                break;
                            case 4:
                                printf("%s", row3NoX);
                                break;
                            case 5:                             
                                printf("%s", row4NoX);
                                break;
                            default:
                                printf("Error");
                                break;
                        }                       
                        break;  
                }               
            }
            printf("\n");           
        }       
    }   
    //printf("Enter a command: ");  
    return (0);
}

输出很接近,但不知何故我遗漏了|和末尾的+-+。

2x2的输出:

代码语言:javascript
运行
复制
+|||+-----+-----+
+|||+     |     |
+|||+     |     |
+|||+     |     |
+|||+-----+-----+
+|||+-----+-----+
+|||+     |     |
+|||+     |     |
+|||+     |     |
+|||+-----+-----+
EN

回答 3

Stack Overflow用户

发布于 2011-03-06 15:30:07

您忘记在行之间打印换行符:

代码语言:javascript
运行
复制
        for (tiny_row = 1; tiny_row < N_ROWS; tiny_row++) {

            printf("%c", row0NoX[strlen(row0NoX)-1]);

            for (col = 0; col < 8; col++) {

                switch (checkerboard[row][col]) {
                    case 0:
                        switch (tiny_row) {
                            case 1:
                                printf("%s", row0NoX);
                                break;
                            case 2:
                            printf("%s", row1NoX);
                            break;
                        case 3:
                            printf("%s", row2NoX);
                            break;
                        case 4:
                            printf("%s", row3NoX);
                            break;
                        case 5:
                            printf("%s", row4NoX);
                            break;
                        default:
                            printf("Error");
                            break;
                    }
                    break;
                }
                // printf("\n"); <-- Not here
            }
            printf("\n") // <-- Here
        }

此外,您还忘了在底部打印“-”行。

票数 2
EN

Stack Overflow用户

发布于 2011-03-06 15:35:30

像这样的东西?

代码语言:javascript
运行
复制
#define BLOCK_SIZE_X 5
#define BLOCK_SIZE_Y 4

void draw_box(int w, int h) {
    int x, y;
    for (y = 0; y <= h * BLOCK_SIZE_Y; y++) {
        int on_horizontal = !(y % BLOCK_SIZE_Y);
        for(x = 0; x <= w * BLOCK_SIZE_X; x++) {
            int on_vertical = !(x % BLOCK_SIZE_X);
            if (on_horizontal && on_vertical) {
                printf("+");
            } else if (on_horizontal) {
                printf("-");
            } else if (on_vertical) {
                printf("|");
            } else printf(" ");
         }
         printf("\n");
    }
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-06 18:43:55

我认为你的新问题在这一行:

(tiny_row = 1;tiny_row < N_ROWS;tiny_row++) {

我猜N_ROWS被初始化为5

row4NoX是初始化为所有----的行,但由于它从未打印出来,我猜tiny_row永远不会等于5,而且for循环看起来一定很有趣。

(我永远不会习惯C中的1初始化循环,但是当我看到一个用于<测试的循环时,我认为它是一个错误。这可能不是世界上最准确的启发式方法,但到目前为止,它对我来说效果很好。:)

小小的说教建议:不要将变量名和索引与不同的编号方案混为一谈。坚持使用0-索引或1-索引(如果你从FORTRAN代码:转移过来的话),当你试图混合它们时,你通常会在编写可靠的软件时遇到更多的心理障碍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5209231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档