文件读取fscanf新的认识

1.读取一个double型

在c语言里面,将一个浮点数输出到文件中,可以使用符合%f.

如:double a = 0.0;

       fprintf(fp, "a=%f",a);

而要从文件中读取一个double类型的浮点数,就不能用%f,而要用%lf才可以。如:

double a;

float b;

fscanf(fp, "%f", &a);  //错误

fscanf(fp, " %lf", &a);//正确

追究一下原因:因为格式符"%f"指示的是一个float类型(4个字节),而我们给的指针位置是一个双精度(double)类型,占8个字节,这样在上面的第一个fscanf语句中,实际上把a当初float类型,也就是只填了8个字节的前4个字节,而后面的4个字节并没有变,这样变量a的数据就不是一个正确的值,而格式符"%lf"利用修饰符来表示这是一个长类型的浮点数(双精度),所以会得到正确的值。

 

2.fgets()用法

从流中读一行或指定个字符,

原型是char *fgets(char *s, int n, FILE *stream);
从流中读取 n-1个字符,除非读完一行(换行\n) ,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为 1k,即1024 ;stream文件指针。

例:如果一个文件的当前位置的文本如下

Love ,I Have
But ........
如果用  fgets(str1,4,file1);
则执行后 str1="Lov", 读取了4-1=3个字符,
而如果用  fgets(str1,23,file1);
则执行str="Love ,I Have",读取了一行( 包括行尾的'\n',并自动加上字符串结束符'\0' )。

3.fscanf()的用法

int fscanf(FILE *stream, char *format,[argument...]);

int fscanf(文件指针,格式字符串,输入列表);
返回值:整型,数值等于[argument...]的个数
多行输入时,fscanf(fp,"%[^\n]",szbuff);文件指针在读到"\n"时停止不能越过,所以后面的内容fp指不到;这时我们解决办法是:fscanf和fgetc连用解决。输入一条fscanf(fp,"%[^\n]",szbuff);此时文件指针指导“\n”位置,后面紧跟一条fgetc(fp);可以读取“\n”,这样指针即可越过"\n".

4.scanf/fscanf 的%[]和%n使用方法

详细请见链接http://blog.csdn.net/wesweeky/article/details/6439777

转载于:https://www.cnblogs.com/boole/p/fscanf.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值