一个数组,表示具有填充空格和空格的面板

时间:2015-04-10 19:57:21

标签: c arrays flood-fill

我正在编写一个程序来读取输入(水平和垂直线的坐标),如下所示:

struct Data {
    // the beginning and ending coordinate of a line
    int xStart;
    int xEnd;
    int yStart;
    int yEnd;
};
// the dimension of panel on which you draw lines
int panelWidth, panelHeight;
// number of lines drawn on the panel
int numLines;

scanf("%d %d", &panelWidth, &panelHeight);
struct Data data[5];
int j;
int i;

j = 0;
if (scanf("%s", &numLines) == 1)
 {
    for (i = 0 ; ((i < numLines) && (j < 5)) ; ++i)
     {
        if (scanf("%d %d %d %d",
            &data[j].xStart, 
            &data[j].yStart, 
            &data[j].xEnd, 
            &data[j].yEnd) == 4)
         {
            j++;
         }
     }
 }

现在我想将这些值放在一个代表面板的数组中并绘制面板上的所有行(例如,将值1放在有一条线的位置,将0放在单元格为空的位置),这样我就可以了然后可以计算这些线所做的所有区域(带零的空格)。

它应该像洪水填充一样工作。

我如何制作这样的阵列?或者有更好的选择吗?

  

这是一个更复杂的输入的例子:

27 27 // width, height
7 // number of Lines
10 0 10 10 // xStart, xEnd, yStart, yEnd
0 10 10 10 // xStart, xEnd ...
5 5 15 5
15 5 15 15
5 15 21 15
5 5 5 15
5 20 26 20

1 个答案:

答案 0 :(得分:2)

  

您的问题是否正确地缩写为“如何在C中创建一定大小的数组?”

     

- Jongware

我猜Jongware正在做某件事,而你正试图动态分配一个n x m数组。换句话说,您希望创建一个数组,其大小由用户键入的内容决定。

要做到这一点,你必须使用'堆'。如果您之前没有在C中完成动态内存分配,我建议只创建一个大型数组(比如10,000个元素),并且只使用您需要的任何内容。然后你可以确保用户不能输入任何比这更大的东西。

如果您确实想要动态执行此操作,我们将使用您的panelWidthpanelHeight变量。事实上,在StackOverflow上有一个很好的帖子:

Malloc a 2d array in C

希望其中一种方法是你正在寻找的。如果没有,澄清你究竟在问什么也不会有什么害处。你提供了很多信息,但并非一切都是真正相关的。我认为Jongware很好地总结了你的问题。