c - 从文本文件读取数字到二维数组

标签 c

尽管这里有很多例子,但我似乎无法让它工作......

我有一个文本文件,包含很多行,每行有三个 (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/

相关文章:

c - 按整数值进行位移位

C-GTK-g_application_quit

c - 请理解,我是新手。有人可以解释一下验证功能吗?

c - 当我们为 50n logn 计算 Big-Oh 时,它是 O(n log n)?我们可以把 O(n^5) 当作 Big-Oh 吗?

c - C 中的多线程程序 - 从不兼容的指针类型进行赋值

c++ - 仅仅通过修改比较就能使qsort稳定?

java - C 套接字 - 一次随机接收多个字符串

c - MagickWand 库 : write to buffer instead of file

c - 查找二维数组中的所有相邻元素

c - 读取文件并将每一行保存到 C 中的变量