博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件读取fscanf新的认识
阅读量:6244 次
发布时间:2019-06-22

本文共 1158 字,大约阅读时间需要 3 分钟。

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使用方法

详细请见链接

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

你可能感兴趣的文章
git 创建本地分支、提交到远程分支
查看>>
什么是http?
查看>>
pthreads v3下的同步处理synchronized
查看>>
10.第一个小项目
查看>>
SDS(Simple Dynamic String)一个简易动态字符串库
查看>>
swfit-pod使用
查看>>
(九)easyUI之选项卡
查看>>
日志分析工具ELK(三)
查看>>
PAT (Advanced Level) 1049. Counting Ones (30)
查看>>
HDU 5763 Another Meaning
查看>>
session详解
查看>>
scroll滚动条
查看>>
mysql链接超时错误
查看>>
Win10 安装 Linux子系统 Ubuntu18.04 / Kali Linux 的体验
查看>>
才发现用git Gui也能上传项目到gitHub,下面分享一下经验
查看>>
P1462 通往奥格瑞玛的道路
查看>>
关于ajax
查看>>
一份关于jvm内存调优及原理的学习笔记
查看>>
怎么查看80端口占用情况- 如何查看端口占用情况?
查看>>
搭建测试框架
查看>>