fscanf 用于 int 和 float returns 大值用于 int,NAN 用于 float
fscanf for int and float returns large value for int, and NAN for float
我正在尝试从数据类型为 int
和 float
的配置文件中存储一系列值。我不确定为什么,但是当我打印数组中的值时,int 值 returns 是一个大数字,而浮点数 return NAN.
配置文件:
1666 -0.314913523 0.999804843
1667 -0.337279687 0.999865966
1703 -0.323162231 0.999774194
1704 -0.311984064 0.99964375
1705 -0.311984064 0.99964375
1706 -0.313381260 0.999671436
1707 -0.313170802 0.999558174
我的代码:
#include <iostream>
using namespace std;
#define NUM_ITEMS 50
int main()
{
FILE *fp;
fp = fopen("config.conf","r");
int a[NUM_ITEMS][NUM_ITEMS];
float b[NUM_ITEMS][NUM_ITEMS];
float c[NUM_ITEMS][NUM_ITEMS];
int i = 0;
while(fscanf(fp,"%i\t%f\t%f", a[i], b[i], c[i]) != EOF)
{
printf("%i %f %f\n", a[i], b[i], c[i]);
i++;
}
fclose(fp);
}
输出:
1149516976 -nan 0.000000
1149517176 -nan 0.000000
1149517376 -nan 0.000000
1149517576 -nan 0.000000
1149517776 -nan 0.000000
1149517976 -nan 0.000000
1149518176 -nan 0.000000
int a[NUM_ITEMS][NUM_ITEMS];
float b[NUM_ITEMS][NUM_ITEMS];
float c[NUM_ITEMS][NUM_ITEMS];
这使得a
、b
和c
数组成为数组,所以a[i]
是一个数组。你想要:
int a[NUM_ITEMS];
float b[NUM_ITEMS];
float c[NUM_ITEMS];
所以 a
是一个 int
的数组,现在 a[i]
是一个 int
。不过,您需要将地址传递给 scanf
。
这是修复了所有主要问题的代码:
#include <iostream>
#define NUM_ITEMS 50
int main()
{
FILE *fp;
fp = fopen("config.conf","r");
if (fp == NULL)
return -1;
int a[NUM_ITEMS];
float b[NUM_ITEMS];
float c[NUM_ITEMS];
int i = 0;
while(fscanf(fp,"%i\t%f\t%f", &a[i], &b[i], &c[i]) == 3)
{
printf("%i %f %f\n", a[i], b[i], c[i]);
i++;
}
fclose(fp);
}
我正在尝试从数据类型为 int
和 float
的配置文件中存储一系列值。我不确定为什么,但是当我打印数组中的值时,int 值 returns 是一个大数字,而浮点数 return NAN.
配置文件:
1666 -0.314913523 0.999804843
1667 -0.337279687 0.999865966
1703 -0.323162231 0.999774194
1704 -0.311984064 0.99964375
1705 -0.311984064 0.99964375
1706 -0.313381260 0.999671436
1707 -0.313170802 0.999558174
我的代码:
#include <iostream>
using namespace std;
#define NUM_ITEMS 50
int main()
{
FILE *fp;
fp = fopen("config.conf","r");
int a[NUM_ITEMS][NUM_ITEMS];
float b[NUM_ITEMS][NUM_ITEMS];
float c[NUM_ITEMS][NUM_ITEMS];
int i = 0;
while(fscanf(fp,"%i\t%f\t%f", a[i], b[i], c[i]) != EOF)
{
printf("%i %f %f\n", a[i], b[i], c[i]);
i++;
}
fclose(fp);
}
输出:
1149516976 -nan 0.000000
1149517176 -nan 0.000000
1149517376 -nan 0.000000
1149517576 -nan 0.000000
1149517776 -nan 0.000000
1149517976 -nan 0.000000
1149518176 -nan 0.000000
int a[NUM_ITEMS][NUM_ITEMS];
float b[NUM_ITEMS][NUM_ITEMS];
float c[NUM_ITEMS][NUM_ITEMS];
这使得a
、b
和c
数组成为数组,所以a[i]
是一个数组。你想要:
int a[NUM_ITEMS];
float b[NUM_ITEMS];
float c[NUM_ITEMS];
所以 a
是一个 int
的数组,现在 a[i]
是一个 int
。不过,您需要将地址传递给 scanf
。
这是修复了所有主要问题的代码:
#include <iostream>
#define NUM_ITEMS 50
int main()
{
FILE *fp;
fp = fopen("config.conf","r");
if (fp == NULL)
return -1;
int a[NUM_ITEMS];
float b[NUM_ITEMS];
float c[NUM_ITEMS];
int i = 0;
while(fscanf(fp,"%i\t%f\t%f", &a[i], &b[i], &c[i]) == 3)
{
printf("%i %f %f\n", a[i], b[i], c[i]);
i++;
}
fclose(fp);
}