LINUX 下C语言从文件读取数据到数组的问题
我的代码如图,文件中的数据为整形或者是浮点型得到的结果fgetc得到的是数字的ASC码,fscanf得到的是2,如何解决得到的可能是整形或者浮点型的问题,多谢各位大哥...
我的代码如图,文件中的数据为整形或者是浮点型
得到的结果fgetc得到的是数字的ASC码,fscanf得到的是2,
如何解决得到的可能是整形 或者浮点型的问题,多谢各位大哥 展开
得到的结果fgetc得到的是数字的ASC码,fscanf得到的是2,
如何解决得到的可能是整形 或者浮点型的问题,多谢各位大哥 展开
9个回答
展开全部
文件中保存的数据有实型有整型,则在读取数据时,均按浮点数据读取就好了。
参考代码:
#include <stdio.h>
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;i<n;i++ ) //输出读到的结果
printf("%g\n", a[i] );
fclose(fp);
return 0;
}
展开全部
如果你不知道文件中数据写入时类型顺序(即,比如先往文件写入一个整型,再写入一个浮点型,那么你读取的话也应该先读取一个整型,再读取一个浮点型的顺序),那么你对文件的读取是非常困难的.除非是文本类型的文件,文本类型的文件都是可以按一个字符一个字符读取的,但是二进制文件必须按写入类型的顺序读取才能保证数据正常.
也就是说,如果你不知道数据写入顺序,那么是不可能正确读取的.
也就是说,如果你不知道数据写入顺序,那么是不可能正确读取的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看下是不是输出写错了,写的是输出阿斯科码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fscanf(p, "%c", &j)这里,改下里面的参数
整形:"%d"
浮点点:"%f"
双精度:"%lf"
....
整形:"%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);
当然,这个精度非常有限。
你也可以直接以字符串方式读取,然后自己处理转换。
你这里所用的语法属于标准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);
当然,这个精度非常有限。
你也可以直接以字符串方式读取,然后自己处理转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询