将数据存储到多维数组中

时间:2015-04-10 17:02:53

标签: c arrays scanf

为了阅读一些描述线条坐标的数据,我写了以下代码:

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个二维数组中?

3 个答案:

答案 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);
    }   
}