我的代码有一个错误,该错误将框打印在单独的行上,而不是彼此打印。我假设问题出在我最初的for循环中。我不确定如何调整算法。 任何帮助将不胜感激!
这是我需要的:
这是我当前拥有的代码及其输出:
#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;
}
答案 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);
...