为了阅读一些描述线条坐标的数据,我写了以下代码:
int numLines;
scanf("%d", &numLines);
int xStart, yStart, xEnd, yEnd;
for (int i = 0; i < numLines; i++) {
scanf("%d %d %d %d", &xStart, &yStart, &xEnd, &yEnd);
}
但是如果我将数据存储到多维数组中,我认为对于程序的其余部分会更有用。我该怎么做,哪个更好:将数据存储到一个4维或2个二维数组中?
答案 0 :(得分:1)
您的第一个scanf()
错误,您需要告诉scanf()
要扫描的内容,即通过说明符进行操作。
没有说明符,它会将传递的参数解释为格式字符串,这会导致问题,所以你需要
if (scanf("%s", &numLines) == 1)
{
for (int i = 0 ; i < numLines ; ++i)
{
if (scanf("%d %d %d %d", &xStart, &yStart, &xEnd, &yEnd) == 4)
{
/* process the data here */
}
}
}
你真的不需要这么多维数组,你可以使用struct
,比如
struct Data
{
int xStart;
int xEnd;
int yStart;
int yEnd;
};
现在,你可以创建一个struct
和其他许多东西的数组,当你使用它时你只需要
struct Data data[SIZE];
int j;
j = 0;
if (scanf("%s", &numLines) == 1)
{
for (int i = 0 ; ((i < numLines) && (j < SIZE)) ; ++i)
{
if (scanf("%d %d %d %d",
&data[j].xStart,
&data[j].yStart,
&data[j].xEnd,
&data[j].yEnd) == 4)
{
j++;
}
}
}
我甚至会更进一步,并定义
struct Item
{
int start;
int end;
};
struct Items
{
struct Item x;
struct Item y;
};
这将使代码更具可读性和可理解性。
答案 1 :(得分:0)
我建议使用结构。 例如 struct Line { int startX; int startY; int endX; int endY; };
然后使用这种结构的数组。
答案 2 :(得分:0)
我建议使用2 struct
s而不是多维数组。这更自然。
#include <stdio.h>
#define numlines 10
struct point {
int x;
int y;
};
struct line {
struct point a; /* start */
struct point b; /* end */
};
struct line lines[numlines];
int main() {
int i;
for ( i = 0; i < numlines; i++ ) {
scanf("%d %d", &lines[i].a.x, &lines[i].a.y);
scanf("%d %d", &lines[i].b.x, &lines[i].b.y);
}
}