我目前正在将文件中的矩阵输入转换为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;
}
答案 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
。