文件中保存的数据有实型有整型,则在读取数据时,均按浮点数据读取就好了。
参考代码:
#include
int main()
{
FILE *fp ;
int i,n;
double a[100];
fp=fopen("data.txt", "r") ;
if ( !fp )
{
printf("open file error");
return -1;
}
i=0;
while( i<100 ) //控制不能超过数组的大小
{
if ( fscanf(fp, "%lf",&a[i] )!= 1 ) //按浮点数读取数据
break;
i++;
}
n=i;
for( i=0;iprintf("%g\n", a[i] );
fclose(fp);
return 0;
}
如果你不知道文件中数据写入时类型顺序(即,比如先往文件写入一个整型,再写入一个浮点型,那么你读取的话也应该先读取一个整型,再读取一个浮点型的顺序),那么你对文件的读取是非常困难的.除非是文本类型的文件,文本类型的文件都是可以按一个字符一个字符读取的,但是二进制文件必须按写入类型的顺序读取才能保证数据正常.
也就是说,如果你不知道数据写入顺序,那么是不可能正确读取的.
你看下是不是输出写错了,写的是输出阿斯科码。
fscanf(p, "%c", &j)这里,改下里面的参数
整形:"%d"
浮点点:"%f"
双精度:"%lf"
....
确实,没说清楚你究竟想干什么。
你这里所用的语法属于标准C ,跟Linux没有关系,在其他平台下也是这么写法。
fgetc返回的是整数,是相应字符的ASCII码,以字符方式输出即可得到原字符。
如果你的文件中既有整数,又有浮点数,你想把他们读入一个数组的话,那么你这个数组就不该是 int dataset[100];,而应该是 doublec dataset[100]; 或 float dataset[100];,整数是可以当作浮点数读取、存储的,如果你要把其中的整数分离出来,可以类似如下代码:
double f;
scanf("%lf",&f);
if(f == (int)f) //if(fabs(f-(int)f)<1e-6)
printf("%d\n",(int)f);
else
printf("%lf\n",f);
当然,这个精度非常有限。
你也可以直接以字符串方式读取,然后自己处理转换。