表示具有填充和空白区域的面板的数组

An array that represents a panel with filled and blank spaces

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

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 放在单元格为空的地方),所以然后我可以计算这些线构成的所有区域(带零的空格)。

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

如何制作这样的数组?或者有更好的选择吗?

This is an example of a more complicated input:

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

Is your question correctly condensed to 'how do I make an array of a certain size in C'?

– Jongware

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

为此,您必须使用 'the heap'。如果您以前没有在 C 中进行过动态内存分配,我建议您只制作一个大数组(比如 10,000 个元素)并且只使用您需要的任何内容。然后你可以确保用户不能输入任何比这更大的东西。

如果您真的想动态地执行此操作,我们将使用您的 panelWidthpanelHeight 变量。事实上,在 Whosebug 上有一个很好的 post:

Malloc a 2d array in C

希望其中一种方法是您正在寻找的。如果没有,澄清你到底在问什么也没什么坏处。您提供了很多信息,但并非所有信息都真正相关。我觉得Jongware把你的问题总结的很好