c - 如何从文件中读取整数到 C 中的一维数组

标签 c arrays io

我正在尝试从 txt 文件中读取整数并将它们存储在一维数组中。我尝试了几种方法,但无法正常工作。 我的文本文件在下面

1 2
2 1
3 2
2 1
1 2
2 1
3 2
2 1
1 2
2 1
3 2
2 1

这是我的代码

#include <stdio.h>
#include <stdlib.h>

int main(void) // usually we write void when main doesn't take args
{
    int i;
    int j;

    /*matrix*/

    int *mat = malloc((12* 2* sizeof ( int))); // no casting!


    FILE *file;
    file=fopen("test.dat", "r");   // extension file doesn't matter
    if(!file) {
        printf("File not found! Exiting...\n");
        return -1;
    }

    for(i = 0; i < 12; i++)
    {
        for(j = 0; j < 2; j++)
        {
            if (!fscanf(file, "%d", &mat[i*2 + j])){
                printf("error!\n");
                break;
            }

            //fscanf(file, "%d", &mat[i*2 + j]);
            printf("ok!\n");

            printf("%d \t",mat[i*2 + j]); // mat[i][j] is more clean
        }
        printf("\n");

    }

    free(mat);
    fclose(file);

    return 0;
}

感谢您的帮助! ******更新**** 我发现第一个问题是我无法读取文件,但后来我发现我只能打印一个值 1 而不是那里的 24 个值

./print_mat 
ok!
1   error!

error!

error!

error!

error!

error!

error!

error!

error!

error!

error!

error!

最佳答案

代码很好。 段错误的可能原因是文件无法打开(可能找不到文件)。

如果文件中包含的数据没有您预期的那么多,则可能会出现问题。

你可以这样检查:

#include <stdio.h>
#include <stdlib.h>

int main(void) // usually we write void when main doesn't take args
{
    int i;
    int j;

    /*matrix*/

    int *mat = malloc((12* 2* sizeof ( int))); // no casting!


    FILE *file;
    file=fopen("test.txt", "r");   // extension file doesn't matter
    if(!file) {
        printf("File not found! Exiting...\n");
        return -1;
    }

    for(i = 0; i < 12; i++)
    {
        for(j = 0; j < 2; j++)
        {
            if (!fscanf(file, "%d", &mat[i*2 + j]))
                break;
            printf("ok!\n");

            printf("%d\n",mat[i*2 + j]); // mat[i][j] is more clean
        }

    }

    free(mat);
    fclose(file);

    return 0;
}

Why not to cast what malloc returns .

[编辑]

更好的错误输出可以像这样完成:

if(!file) { // equivalent to file == NULL
    perror("File not found! Exiting...\n");
    return -1;
}

现在,当文件无法打开时,你会得到我在里面的输出 perror 以及错误消息。

我试图打开一个不存在的文件并得到了

File not found! Exiting...
: No such file or directory

可能该文件与主文件不在同一目录中。

感谢 Olaf Dietsche 和 pmg 的评论。

正如另一个答案所述,您始终可以使用调试器 来查找问题出在哪里。 很多人用valgrind .

正如 OP 发现的那样,当值由逗号而不是空格分隔时,scanf() 将无法解析文件。

关于c - 如何从文件中读取整数到 C 中的一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23650144/

相关文章:

javascript - 带 if 语句的 while 循环不起作用

performance - VBA I/O 性能

c - 数据对齐问题

java - 给定一个数字流,例如 1,3,5,4,6,9,我被要求打印它们,例如 1,3-6,9

c - 用 write 代替 printf 进行信号处理

PHP:确保数组仅包含来自某个类的对象

io - 当我在一个 LV 下有多个磁盘时,lvm 的性能如何

arrays - MIPS:将整数数据从文件存储到数组中

可以在 __ global __ 之外创建线程吗?

c++ - 打开 Mp 嵌套并行