【发布时间】:2016-06-17 22:11:21
【问题描述】:
我目前正在将文件中的矩阵输入转换为二维数组。鉴于喜欢,
-
2,3,4
1,2,3
4,5,6
-
3,5,6,3,1
2,3,6,7,8
8,7,6,5,4
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;
}
【问题讨论】:
-
您是否尝试将
#define MAXD 3增加到更大的数字?也许代码可以正常工作,但由于硬编码的大小而被限制为 3。 -
@Shark 是的,这是针对 3*3 矩阵的。因此,MAXD 为 3。由于我想要完全由用户定义的 5*5 或 9*9 等各种大小的输入,在文本文件中,此方法不适用于我。
-
动态分配
char** lines,相当于lines[rows][columns] -
@Shark 是的,我可以这样做,但是在我不知道一行中元素的数量的情况下,我该怎么做呢?不会是无限循环吗?
-
你刚才不是说
"Since I want various size of inputs like 5*5 or 9*9 which is totally user defined, inside the text file"吗?因此,您甚至在开始阅读之前就知道元素的数量。
标签: c arrays matrix arraylist multidimensional-array