fscanf仅读取零

时间:2019-03-10 18:51:50

标签: c file-io

我正在尝试从.txt文件中读取数据,其格式类似于

1.671346 4.064608 -3.861660 
2.891781 -3.505203 0.733207 
-2.033906 -3.854335 -2.194739 
1.726585 -4.220862 3.629719 

N行中的每行都包含粒子的x,y,z坐标,我打算将它们存储在N * 3维数组中。

但是,当我尝试读取数据时,我的坐标数组充满了零。

代码如下:

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

void leggiFile(FILE *fp, int nrighe, double c[]){
int i;
 for(i=0;i<nrighe;i=i+3){
  fscanf(fp, "%lf %lf %lf", &c[i], &c[i+1], &c[i+2]);
  printf("%lf",c[i]);
 }
}

int main(){
 FILE* fp=fopen("CoordinateMC.txt","r");
 double coord[1500]={0};
 int nrighe=500; 
 leggiFile(fp, nrighe, coord);
}

仅打印0.00000

我尝试将所有“%lf”切换为“%f”,并将所有“&c [stuff]”切换为“ c [stuff]”

我怀疑由于我的IDE(code :: blocks)设置不正确而导致此操作不起作用。但是我运行的用于生成.txt文件的程序却很吸引人!

1 个答案:

答案 0 :(得分:0)

该程序仅需进行一些小的更改,并带有注释。它可以打印正确的结果,但是并没有停止,因此您看到的只是0.00000的森林。最主要的是检查I / O操作的结果

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

void leggiFile(FILE *fp, int nrighe, double c[]){
    int i;
    for(i = 0; i < nrighe; i = i + 3){
        if(fscanf(fp, "%lf %lf %lf", &c[i], &c[i+1], &c[i+2]) != 3) {
            break;                          // conversion was unsuccessful
        }
        printf("%f\n",c[i]);                // removed the `l` from `lf`
    }
}

int main(void){                             // correct definition of maiin
    FILE* fp = fopen("CoordinateMC.txt", "r");
    if(fp == NULL) {                        // check the file opebned
        perror("Cannot open file");
        exit(1);
    }
    double coord[1500] = { 0 };
    int nrighe = 500; 
    leggiFile(fp, nrighe, coord);
    fclose(fp);                             // tidy up
}

程序输出:

1.671346
2.891781
-2.033906
1.726585

但是我不知道您是否发布了实际的代码,因为您说fscanf返回了-1,只有在没有输入数据的情况下,它才这样做。