尽管这里有很多例子,但我似乎无法让它工作......
我有一个文本文件,包含很多行,每行有三个 (int) 值,用一个空格分隔。例如:
1 0 0
0 0 0
1 0 1
0 0 2
1 0 2
我正在尝试将其读入二维数组。
到目前为止我的代码:
int main(void)
{
char c;
int i = 0;
int maxLines = 18;
char lines[maxLines][BUFSIZ];
FILE *fp = fopen("inputs/control.txt", "r");
if (fp == 0)
{
fprintf(stderr, "failed to open inputs/control.txt\n");
exit(1);
}
char buffer[maxLines];
while (i < maxLines && fgets(buffer[i], sizeof(buffer[0]), fp))
{
sscanf (buffer, "%d %d %d", &lines[i][0], &lines[i][1], &lines[i][2]);
i++;
}
fclose(fp);
return 0;
}
有人可以建议我如何进一步开发它,以便行中的每个值都存储在单独的数组索引中吗?在我上面的示例中,我们将存储如下内容:
lines[0][0] = 1
lines[0][1] = 0
lines[0][2] = 0
and so on.....
目前它将整行存储在一个数组 pos 中。
您可能会说我是 C 菜鸟,任何帮助都会很棒!
最佳答案
你的方式很好,你只是认为你正在读取一个字符数组而不是一个有符号字符数组(可以更改为 int 等),这是你的例子:
#include <stdio.h>
#define MAXB 32
#define MAXL 18
#define MAXD 3
int main(void)
{
int i = 0;
int numlines = 0;
char buf[MAXB] = {0};
char lines[MAXL][MAXD];
FILE *fp = fopen("inputs/control.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;
int j = 0;
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;
}
输出
$ ./bin/read_array_a3
line[ 0][ 0] : 1
line[ 0][ 1] : 0
line[ 0][ 2] : 0
line[ 1][ 0] : 0
line[ 1][ 1] : 0
line[ 1][ 2] : 0
line[ 2][ 0] : 1
line[ 2][ 1] : 0
line[ 2][ 2] : 1
line[ 3][ 0] : 0
line[ 3][ 1] : 0
line[ 3][ 2] : 2
line[ 4][ 0] : 1
line[ 4][ 1] : 0
line[ 4][ 2] : 2
注意: char lines[MAXL][MAXD];
很好,您只需要了解每个元素都被限制为一个 8 位 有符号值,这意味着值介于 -128 < val < 127
之间。 .你可以让他们int
如果您需要存储更大的值。
关于c - 从文本文件读取数字到二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064121/