C |仅具有for / while循环和if / else语句的框内打印框

时间:2018-08-06 02:05:21

标签: c loops for-loop if-statement

我的代码有一个错误,该错误将框打印在单独的行上,而不是彼此打印。我假设问题出在我最初的for循环中。我不确定如何调整算法。 任何帮助将不胜感激!

这是我需要的:

enter image description here

这是我当前拥有的代码及其输出:

#include <stdio.h>

int main(void) {

    int boxes;

    printf("How many boxes: ");
    scanf("%d", &boxes);


    int boxSide = boxes *3 + (boxes - 1);
    int i;
    int j;

    for (i = 0, j = 0; i < boxes; i++, j += 2) { 

        int row = 1;   

            while (row <= boxSide) {

                int column = 1;

                while (column <= boxSide) {

                    if ( (row == (j+1) && column >= (j+1) && column <= boxSide - (j+1)) ||
                         (row == boxSide - j && column >= (j+1) && column <= boxSide - (j+1)) ||
                         (column == (j+1) && row >= (j+1) && row <= boxSide - (j+1)) ||
                         (column == boxSide - j && row >= (j+1) && row <= boxSide - j) ) {

                    printf("#");

                    }

                    else {
                        printf(" ");
                    }

                column++;

                }

                row++;
                printf("\n");

            }

    }
    return 0;
}

enter image description here

2 个答案:

答案 0 :(得分:3)

NCurses是你的朋友。

它具有在指定位置打印内容的方法。

Here是一个教程,介绍了所有方法,什么是NCurses以及如何使用它。

但是,要回答您的问题...

之所以会发生这种情况,是因为除非您使用NCurses之类的具有将光标移动到任何地方的方法的库,否则println()(或printf("\n"))会将光标移动到下一个可用行。

答案 1 :(得分:0)

有几种方法,一些想法:

1)绘制到数组,并在绘制完成后,打印其内容:

char table[boxSide][boxSide]; 
...
if (...) {
    table[x][y] = '#';
}
...

2)将box循环移到最内部的循环:

while (row <= boxSide) {
    while (column <= boxSide) {
        char c = ' ';
        for (i = 0, j = 0; i < boxes; i++, j += 2) {                        
            if ( .... ) {
                c = '#';
            }
        }
        printf('%c', c); 
        ...