矩阵从C文件中用逗号分隔的文件输入到2D

时间:2016-03-04 08:47:36

标签: c arrays matrix arraylist multidimensional-array

我目前正在将文件中的矩阵输入转换为2D数组。鉴于,

  • 2,3,4-

    1,2,3

    4,5,6

  • 3,5,6,3,1

    2,3,6,7,8

    8,7,6,5,4

    1,3,4,6,7,8-

矩阵的大小可以变化。我可以使用我的代码为3 * 3矩阵执行此操作(如下所示)。我应该做什么改变,以便我可以输入任何大小的矩阵,如7 * 7或5 * 5?

#include <stdio.h>

#define MAXB 32
#define MAXL 18
#define MAXD 3

int main(void)
{
int i = 0,temp,n,m,j=0;
int numlines = 0;
char buf[MAXB] = {0},c;
char lines[MAXL][MAXD];

FILE *fp = fopen("num.txt", "r");

if (fp == 0)
{
   fprintf(stderr, "failed to open inputs/control.txt\n");
   return 1;
}

while (i < MAXL && fgets (buf, MAXB - 1, fp))
{
    if (sscanf (buf, "%hhd, %hhd, %hhd", &lines[i][0], &lines[i][1], &lines[i][2]) == 3)

        i++;
}

fclose(fp);

numlines = i;

for (i = 0; i < numlines; i++)
    for (j = 0; j < MAXD; j++)
        printf (" line[%2d][%2d] : %hhd\n", i, j, lines[i][j]);

printf ("\n");

return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以使用以下简单的内容替换while循环:

while (fscanf(fp, "%hhd", &lines[i][k]) > 0) {

    //check to see if the next character is a comma
    fscanf(fp, "%c", &check);

    //if it is a comma, go to the next char, else go to the next line
    if (check == ',') {k++;} else {i++; k=0;}

}

当然,您必须更改一些常量,例如MAXD以获得更大的尺寸。

此外,对于此代码,您需要在while循环之前创建一个整数k和一个字符check