读取数据并分配给数组

问题描述:

我希望能够使用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; 
    } 

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

+1

对于初学者来说,不要用'scanf'来完成。 [永远不要使用'scanf'](https://*.com/questions/15664664/scanf-regex-c/15664816#15664816)。 (请使用'strtok','strtod'和'strtoul'代替,请密切注意'strtoul'手册页中说明如何检查错误的部分。) – zwol

+1

如果您将'];添加到'D [MAXIZE'并添加一个for循环,应该这样做: – Nevado

+1

和'C [i] = b;' - >'C [i] = c;'并使用while循环和'./a.out BLUEPIXY

确保该文件没有多于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; 
} 
+1

你可以使用FILE * fp = argc> 1来使它作为第一个参数提供的文件或者(默认为'stdin')? fopen(argv [1],“r”):stdin;'。 *三元*运算符在许多类似的情况下很有用。 –