我想扫描一个txt文件并将这些数字保存在数组

时间:2018-05-31 05:43:06

标签: c arrays scanf

这是我编写的程序的一小部分,用于将文件BesselFunction.txt的内容保存到数组ZeroBesselFuncTM

constant=fopen("BesselFunction.txt","r");

for(i=0;i<20;i++){
    fscanf(constant,"%lf\n", &zero);
    ZeroBesselFuncTM[i]=zero;
    printf("inside for loop\n");
}

for(i=0;i<20;i++){
    printf("%0.4lf\n", ZeroBesselFuncTM[i]);
}

虽然数组经过19次循环,但数组不会读取我的输入文件。

2 个答案:

答案 0 :(得分:2)

您需要检查文件是否已打开以及是否已读取输入。如果文件过早结束,您还需要停止阅读。

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

int main(void)
{
    const char *filename = "BesselFunction.txt";
    double ZeroBesselFuncTM[20];
    double zero;
    int i, j, n;
    FILE *constant;

    constant = fopen(filename, "r");
    if (constant != NULL) {
        i = -1;
        do {
            i++;
            n = fscanf(constant, "%lf\n", &zero);
            if (n == 1) {
                ZeroBesselFuncTM[i] = zero;
            } else if (n == 0) {
                fprintf(stderr, "Invalid input\n");
                exit(EXIT_FAILURE);         
            }
        } while ((i < 20) && (n != EOF));
        for(j = 0; j < i; j++) {
            printf("%0.4f\n", ZeroBesselFuncTM[j]);
        }
    } else {
        fprintf(stderr, "Cannot open file %s: %s\n", filename, strerror(errno));
        exit(EXIT_FAILURE);
    }
    return 0;
}

答案 1 :(得分:1)

首先检查错误文件是否正确打开。

constant=fopen("BesselFunction.txt","r");
if(constant == NULL) {
  //Process the error
}

同时检查可执行文件所在目录中的文件BesselFunction.txt

第二次检查fscanf错误代码以获取更多更新。

int result = fscanf(constant,"%lf\n", &zero);

 if (result <= 0) {
 //Process the error.
 }