Помощь по печати сетки 8х8 на С - PullRequest
1 голос
/ 06 марта 2011

Мне нужна помощь в печати сетки 8x8 на C.

Типичная сетка 1x1 должна выглядеть так:

+----+
|    |
|    | 
|    |
+----+

Но я не понимаю, хотя я проверил все, что могло вызвать проблему.

Не могли бы вы, ребята, просмотреть код и сказать мне, в чем проблема?

        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);
}

Вывод близок, но почему-то мне не хватает | s и + ---- + в конце.

Выход для 2x2:

+|||+-----+-----+
+|||+     |     |
+|||+     |     |
+|||+     |     |
+|||+-----+-----+
+|||+-----+-----+
+|||+     |     |
+|||+     |     |
+|||+     |     |
+|||+-----+-----+

Ответы [ 3 ]

2 голосов
/ 06 марта 2011

Как то так?

#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 голосов
/ 06 марта 2011

Вы забыли напечатать новые строки между строками:

        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
        }

Кроме того, вы забыли напечатать строку «-» в нижней части.

0 голосов
/ 06 марта 2011

Я думаю, что ваша новая проблема в этой строке:

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

Я предполагаю, что N_ROWS инициализируется как 5.

row4NoX строка инициализирована для всех ----, но, поскольку она никогда не печатается, я предполагаю, что tiny_row никогда не будет равен 5, и этот цикл for выглядит забавно.

(Я никогда не привыкну к 1-инициализированным циклам в C, но когда я вижу один, используемый с тестом <, я предполагаю, что это ошибка. Возможно, это не самая точная эвристика в мире, но она работаетпока для меня. :) 1018

Небольшой совет проповеди: не смешивайте имена переменных и индексы с разными схемами нумерации.Придерживайтесь 0-индексированных или 1-индексированных (если вы переходите от имен кода FORTRAN :), когда вы пытаетесь смешать их, вы часто сталкиваетесь с большим количеством умственных препятствий, чем пытались написать надежное программное обеспечение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...