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
只有在没有输入数据的情况下它才会返回。
我正在尝试从 .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
只有在没有输入数据的情况下它才会返回。