LINUX 下C语言从文件读取数据到数组的问题

我的代码如图,文件中的数据为整形或者是浮点型得到的结果fgetc得到的是数字的ASC码,fscanf得到的是2,如何解决得到的可能是整形或者浮点型的问题,多谢各位大哥... 我的代码如图,文件中的数据为整形或者是浮点型
得到的结果fgetc得到的是数字的ASC码,fscanf得到的是2,
如何解决得到的可能是整形 或者浮点型的问题,多谢各位大哥
展开
 我来答
kaixingui2012
推荐于2016-08-04 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6498万
展开全部

文件中保存的数据有实型有整型,则在读取数据时,均按浮点数据读取就好了。

参考代码:

#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;
}
moxsone
2010-09-02 · TA获得超过3333个赞
知道大有可为答主
回答量:2796
采纳率:50%
帮助的人:1510万
展开全部
如果你不知道文件中数据写入时类型顺序(即,比如先往文件写入一个整型,再写入一个浮点型,那么你读取的话也应该先读取一个整型,再读取一个浮点型的顺序),那么你对文件的读取是非常困难的.除非是文本类型的文件,文本类型的文件都是可以按一个字符一个字符读取的,但是二进制文件必须按写入类型的顺序读取才能保证数据正常.

也就是说,如果你不知道数据写入顺序,那么是不可能正确读取的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老子不洗头
2010-08-22 · TA获得超过169个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:97.8万
展开全部
你看下是不是输出写错了,写的是输出阿斯科码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d050c1b
2010-08-22 · TA获得超过933个赞
知道小有建树答主
回答量:1083
采纳率:50%
帮助的人:1031万
展开全部
fscanf(p, "%c", &j)这里,改下里面的参数
整形:"%d"
浮点点:"%f"
双精度:"%lf"
....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
難得當歌對酒時
2010-08-22 · TA获得超过1187个赞
知道小有建树答主
回答量:517
采纳率:100%
帮助的人:830万
展开全部
确实,没说清楚你究竟想干什么。
你这里所用的语法属于标准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);
当然,这个精度非常有限。
你也可以直接以字符串方式读取,然后自己处理转换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式