fscanf的指针移动
来源:互联网 发布:淘宝网网络营销策略 编辑:程序博客网 时间:2024/05/21 17:54
函数名: fscanf
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
用法:
int
fscanf
(
FILE
*stream,
const
char
*format,[argument...]);
FILE *stream:文件指针;
char *format:格式字符串;
[argument...]:输入列表。
返回值:整型,成功读入的参数的个数;
如果读取到文件结尾,返回EOF(-1)。
今天在用fscanf读取文件中的浮点数,结果一会儿对,一会儿错,找了一下午,才发现自己忽略了fscanf之后,指针的移动问题。
一直以为fscanf会先读入一整串数,再做判断是否符合格式。结果不是这样的,fscanf在遇到不符合格式的地方即停止,指针即停在非法字符的开始处,可能就是一个串的中间。
下面给出例子:
对比结果即可知,当fscanf(fp,"%lf",&buf[cnt]);读到-1.#QNAN000000000e+000这个串时,%lf只读到-1. 此时fp=87;再用%lf,则指针没有移动j=0,fp=87;然后用%s来读,则可读完后面的串#QNAN000000000e+000。。。。。。
返回值:整型,成功读入的参数的个数;
如果读取到文件结尾,返回EOF(-1)。
今天在用fscanf读取文件中的浮点数,结果一会儿对,一会儿错,找了一下午,才发现自己忽略了fscanf之后,指针的移动问题。
一直以为fscanf会先读入一整串数,再做判断是否符合格式。结果不是这样的,fscanf在遇到不符合格式的地方即停止,指针即停在非法字符的开始处,可能就是一个串的中间。
下面给出例子:
start=clock();while(1){j=fscanf(fp,"%lf",&buf[cnt]);printf("j=%d fp=%d\n",j,ftell(fp));if( j==1 ){cnt++;}else{ //文件尾或非法字符j=fscanf(fp,"%s",s);printf("j=%d fp=%d\n",j,ftell(fp));if(j!=1) break;else{ndcnt++;//printf("%s\t",s);//continue; } }count++;}fclose(fp);end=clock();printf("文件读取所花时间:%d 毫秒\n",(end-start));
对比结果即可知,当fscanf(fp,"%lf",&buf[cnt]);读到-1.#QNAN000000000e+000这个串时,%lf只读到-1. 此时fp=87;再用%lf,则指针没有移动j=0,fp=87;然后用%s来读,则可读完后面的串#QNAN000000000e+000。。。。。。
0 0
- fscanf的指针移动
- 指针地址的移动
- 数组,指针的移动
- fscanf 字符的过滤
- fscanf函数的使用
- fscanf的用法
- fscanf函数的应用
- fscanf函数的应用
- fscanf的用法
- fscanf函数的用法
- fscanf()、fprintf()的使用
- fscanf
- fscanf
- fscanf
- [转]scanf(), fscanf()的用法
- fscanf()函数的高级用法
- Matlab中fscanf的用法
- fscanf与fprintf的使用
- “合肥房叔”案涉案民警受审 骗取23套安置房
- 闲话 + .Net yeild语句
- C#文件操作方法整理
- css基础整理2
- centos 上更新g++版本
- fscanf的指针移动
- MongoDB基本命令用
- 关于企业wiki和做事问题
- Android 设计模式 之 观察者模式
- Block阶梯学习_1
- iOS应用开发:什么是ARC?
- CF 339D - Xenia and Bit Operations(线段树)
- 互联网创业者容易遇到的两大致命逻辑错误
- 结构体如何分配内存