0

我有一个包含一堆 int 值的文本文件,前两行的值是 L 和 C,然后是一个空格,之后是一组 int 值用空格分隔的行,第一个值是大小我想用后面的数字创建数组。在这个组之后是另一个与前一个用空行分隔的组,它具有相同的组成,但我想将它保存到不同的组 o 数组中。如何读取此文件并保存 L、C 的值以及接下来的 2 组,如何每行创建一个数组?

前任:

5     
5     

1 2      
1 4    
1 4    
2 5 6    
3 1 4 2       

3 5 1 1      
1 2      
2 3 2           
1 2              
1 3             
4

2 回答 2

1

您知道可以将指针用作数组吗?从那以后,您可以将指针指针用作数组数组。你需要其中两个,每个组一个。

像这样的东西:

int **arrays[2];  /* Array of two pointer-to-pointers */

读取前两个数字后,您可以分配第二级数组:

arrays[0] = malloc(sizeof(int *) * first_number);  /* Allocate for first group */

然后在您阅读组的每一行之后,您可以分配第二级:

arrays[0][i] = malloc(sizeof(int) * size_from_line);

最后将数字放入合适的子数组中:

arrays[0][i][j] = some_number;

希望这应该提供足够的信息来实施它。

注意:如果您需要重新加载此数据,请不要忘记free所有已分配的数据。

于 2013-05-04T23:53:07.217 回答
1
#include <stdio.h>
#include <stdlib.h>

int **readGroup(FILE *fp, int rows){
    int **gp, counter = 0;

    gp=malloc(rows*sizeof(int*));
    for(counter = 0; counter < rows ; ++counter){
        int i,data,size;

        fscanf(fp, " %d", &size);//size of trailing
        gp[counter] = malloc((size+1)*sizeof(int));//+1 for size
        gp[counter][0] = size;//store size to top
        for(i=1;i<=size;++i){
            fscanf(fp, " %d", &data);
            gp[counter][i] = data;
        }
    }
    return gp;
}

int main(void){
    FILE *fp;
    int L,C;
    int **group[2];

    fp = fopen("data.txt", "r");

    fscanf(fp, " %d", &L);
    fscanf(fp, " %d", &C);

    group[0] = readGroup(fp, L);
    group[1] = readGroup(fp, C);

    fclose(fp);
    {// check print
        int gp,r,i,size;
        int rows[] = {L, C};
        for(gp=0;gp<2;++gp){
            for(r=0;r<rows[gp];++r){
                int size = group[gp][r][0];
                for(i=1;i<=size;++i)
                    printf("%d ", group[gp][r][i]);
                printf("\n");
            }
            printf("\n");
        }
    }
    //deallocate 
    return 0;
}
于 2013-05-05T09:07:05.963 回答