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使用方法
详细请见链接