fscanf 只读取零

fscanf reads only zeros

我正在尝试从 .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 文件的程序非常有效!

这是我为 uni 创建的一个旧函数,它检查文件是否存在,然后创建并打印一个包含文件中浮点数的新数组,它还使用另一个函数来计算文件中有多少数字文件。

这是uni的一个老函数,检查文件是否存在创建并打印文件的float数组并使用一个辅助函数来计算文件的数量,你可以很容易地修改函数来做它适用于数组,或者更简单地将原始文件重写为数组。

void leggiDaFile() {
int n;              // la dimensione dell'array
float reale;        // un numero
n = dimensioneFile();               //crea una funzione che ti permette di contare i numeri presenti
FILE* fp = fopen("FILE.txt", "r");  //metti il tuo file
if(fp==NULL) {
    printf("Non ci sono numeri reali da leggere!"); //verifica esistenza file
}
else {
    if(n==0) 
        printf("Non ci sono numeri reali da leggere!");
    else {
        int i=0;                // contatore
        float reali[n];     // i numeri reali da leggere
        while(fgetc(fp)!=EOF){
            fscanf(fp, "%f", &reale);
            reali[i]=reale;
            i++;
        }
        fclose(fp);
        printf("Ecco i numeri reali: ");
        for(i=0; i<n; i++)
            printf("%.2f  ", reali[i]);
    }
}

}

程序只需要做一些小改动,在评论的地方。它正在打印正确的结果,但没有停止,所以你看到的只是一片 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 只有在没有输入数据的情况下它才会返回。