c - 读取数据并分配给数组

标签 c

我希望能够使用 scanf() 读取此 txt 文件的每一行并将每一列分配给一个数组。

    220
    01 01 5.00 1.50
    02 01 4.00 3.00
    02 02 3.00 4.00
    03 01 4.50 3.00
    03 01 7.50 2.50
    03 01 6.00 0.50
    04 01 2.00 3.00
    04 02 2.00 3.00
    05 01 1.50 3.00
    07 01 5.00 1.00
    09 01 1.50 6.00
    -1

到目前为止我只有:

    #define MAXSIZE 100    

    int main(int argc, char *argv[]) {
        int i;
        int a, b;
        double c, d, e;
        int A[MAXSIZE], B[MAXSIZE];
        double C[MAXSIZE], D[MAXSIZE

        i = 0;
        scanf("%d %d %lf %lf", &a, &b, &c, &d);

        A[i] = a;
        B[i] = b;
        C[i] = b;
        D[i] = d;

        i+=1;
    }

有什么办法可以做到这一点吗?

最佳答案

确保文件的行数不超过 MAXSIZE。

您可以使用 fscanf 代替 scanf

如果您确实需要 scanf,您可以将文件作为输入发送到您的程序

$ ./test < test.txt

此代码将与文件和 fscanf 函数一起使用。

#include <stdio.h>

#define MAXSIZE 100    

int main(int argc, char *argv[]) {
    int i;
    int a, b;
    double c, d, e;
    int A[MAXSIZE], B[MAXSIZE];
    double C[MAXSIZE], D[MAXSIZE];

    FILE* fp = fopen("teste.txt", "r");

    if(fp == NULL) {
        printf("Failed to open file.\n");
        return 1;
    }

    fscanf(fp, "%d", &i);// ignore first value
    i = 0;
    while (fscanf(fp, "%d %d %lf %lf", &a, &b, &c, &d) == 4) {
        A[i] = a;
        B[i] = b;
        C[i] = b;
        D[i] = d;

        i++;
        printf("%d %d %f %f\n", a, b, c, d);
    }
    return 0;
}

关于c - 读取数据并分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757288/

相关文章:

c - #define 宏不识别第二位集

c - 从硬盘永久删除文件

c - 在linux上执行C语言输入文件

c - 如何使用 gdb 调试带有核心转储的代码?

c - 如何找到程序的堆栈内存的起始和结束地址?

c - 保护 scanf 不使用定义读取太多字符?

c - 调用 I/O 或 sleep() 后 UDP sendto() 失败

c - 如何在 C 中指向不兼容的指针类型?

ios - block 语法 Objective-C

c - 调试意外终止的守护进程