我正在尝试从.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文件的程序却很吸引人!
答案 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
,只有在没有输入数据的情况下,它才这样做。