fscanf函数的应用
转摘自:http://blog.csdn.net/mxgsgtc/article/details/13005675
以前老是被从文本里读取文件,然后逐个的进行字符解析,感觉非常的慢,自从知道了fscanf函数之后,一切变的so easy!
fscanf函数用于从文本里读一个字符串到指定的数组里面:
- #include <stdio.h>
- #include <string.h>
- struct node{
- char a[20];
- char b[20];
- char c[20];
- char d[20];
- };
- int main()
- {
- FILE *fp;
- struct node buf;
- memset(&buf, 0x00, sizeof(buf));
- fp=fopen("1.txt", "r");
- fscanf(fp,"%[^,],%[^,],%[^,],%s",buf.a,buf.b,buf.c,buf.d);
- printf("[%s][%s][%s][%s]\n",buf.a,buf.b,buf.c,buf.d);
- return 0 ;
- }
这里面要注意的是 1.txt里面的内容是这样的 001data,DI,50,12345 没错,是用“,”号隔开的一些列字符串,以前我们在解析的时候是把这一行读出来,然后再一个一个字符解析,如果遇到“,”的话就分出一个字符串,但是fscanf一句话就搞定了,这里%[ ],是扫描集的意思,%[^,]其中^的意思就是当fscanf一个一个字符从文件读上来的时候如果遇到“,”字符就会停下来,就会把前面读取的字符存到buf中,比如 1.txt里的内容,fscanf会一次的读取001data 当他发现后面有“,”字符的时候就将001data存入buf.a中去了,也就是说^的意思是取反,就是遇到^后面的数就会停下来,那么,%[^,],%[^,]
这种连着的用法又是什么意思呢,注意,%[^,] , %[^,]之间有个“,”,其实是这样的,先看一下一个小例子
- #include <stdio.h>
- #include <string.h>
- struct node{
- char a[20];
- char b[20];
- char c[20];
- char d[20];
- };
- int main()
- {
- FILE *fp;
- struct node buf;
- memset(&buf, 0x00, sizeof(buf));
- fp=fopen("1.txt", "r");
- fscanf(fp,"001d%s",buf.a);
- printf("[%s]\n",buf.a);
- return 0 ;
- }
这里1.txt中的内容与上面的一样,但是最后的输出结果是: ata,DI,50,12345
这回大家应该明白了吧,这个小例子中"001d%s“意思就是说从文本中读取字符串,从"001d"之后的字节开始读取,这回明白了fscanf(fp,"%[^,],%[^,],%[^,],%s",buf.a,buf.b,buf.c,buf.d);的意思了 ,就是说fscanf先读取到001data的时候,发现后面有逗号,于是停下并且赋值,赋值之后(第一次赋值)
剩余字符串变为",DI,50,12345" 也就是说第一个是" , "号,那么接下来scanf会省略这个逗号,从逗号后面的字符D开始继续读取在遇到第二个逗号,读取第二个字符串
即50,所以一次类推
总结:那么以后可以任意的分解字符串了,比如文件里的1.txt文件中的内容为 001data|DI,50 | 12345
我就可以这么分fscanf(fp,"%[^|]|%[^,],%[^|]|%s",buf.a,buf.b,buf.c,buf.d); 分成的结果就是 001data DI 50 12345
这里还要注意fscanf与fget函数的区别:
fscanf 函数遇到空格或是'\n',都会停掉换到下一行
而fget函数只有遇到'\n'才会换到下一行
fscanf函数的应用的更多相关文章
- fscanf()函数基本用法
FILE *fp; while(!feof(fp)) { fscanf(fp,"%s%d%lf",a,&b,&c);//这里%s对应的a不需要加上取地址符号& ...
- 《用格式化(fprintf和fscanf函数)的方式读写文件》
//用格式化(fprintf和fscanf函数)的方式读写文件 [用格式化的方式向文件中写入数据]#include<stdio.h>#include<stdlib.h> int ...
- C库函数标准编程之fscanf()函数解读及其实验
函数功能 fscanf()函数用于从参数stream的文件流中读取format格式的内容,然后存放到...所指定的变量中去.字符串以空格或换行符结束(实验1中会对它进一步说明) 函数格式 字符格式说明 ...
- fscanf函数的用法
fscanf函数用法 简要介绍 fscanf()函数是格式化读写函数.它读取的对象是磁盘文件 函数原型: int fscanf(FILE * fp,char * format,...); 其中fp为文 ...
- 计算机二级-C语言-程序填空题-190115记录-fprintf()函数和fscanf()函数的使用。
//给定程序,函数fun的功能是:将自然数1~10以及它们的平方根写到名为myflie3.txt的文本文件中,然后再顺序读出显示在屏幕上. //重难点:fprintf()函数和fscanf()函数的使 ...
- PHP fscanf() 函数
定义和用法 fscanf() 函数根据指定的格式对来自打开的文件的输入进行解析. 语法 fscanf(file,format,mixed) 参数 描述 file 必需.规定要检查的文件. format ...
- fscanf函数
函数定义: int fscanf( FILE *stream, const char *format [, argument ]... ); 以下是csdn的样例: /* FSCANF.C: This ...
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)
函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...
- C++之函数fgetc和fputc、fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int ...
随机推荐
- ethtool speed HowTo : Change Speed and Duplex of Ethernet card in Linux
To change Speed and Duplex of an ethernet card, we can use ethtool - a Linux utility for Displaying ...
- LINUX网络相关命令(转)
网络连通性 Ping:发送一个 ICMP 回声请求消息给主机,一直持续到到你按下 Ctrl+C .Ping 表示一个包通过 ICMP 从你的机器发送出去,然后在IP层得到回应.Ping 可以检测你与另 ...
- Delphi实例之一个简易的浏览器的实现
Delphi实例之一个简易的浏览器的实现 Delphi7的WebBrowser组件提供了很多不错的网页设计的功能,下面做一个简单的浏览器.组件很简单按照下面摆放就行了. 这是运行后的效果 源代码 主页 ...
- 学习人工智能的第六个月[深度学习[Deep Learning,DL]]
这个月阅读了论文[Partial Adversarial Domain Adaptation-eccv18],文章着眼于源域标签空间包含目标域标签空间的场景,在域对抗神经网络的基础上提出了部分对抗域适 ...
- 功能规格说明书Version2
此功能规格说明书是Week8 功能规格说明书的第二个版本, 版本1地址:http://www.cnblogs.com/Z-XML/p/3407687.html 此功能规格说明书是面向用户的,所以作者将 ...
- 另外一种C#多选下拉框
链接: https://pan.baidu.com/s/1tnLgC9P_V8y9qHTYSg8xGA 密码: cwxj
- 微信公众号开发java框架:wx4j(MenuUtils篇)
wx4j-MenuUtils使用 函数说明:发送http请求到微信服务器,完成菜单创建 参数:构造菜单对象 返回值:微信响应的json字符串 public static String createMe ...
- ArcGIS API for JavaScript使用中出现的BUG(1)
本人在使用ArcGIS API for JavaScript开发一个地图的搜索框时,总是出现一个BUG.如图所示: 搜索框总是出不来. 该引用的也引用了,找了半天终于解决,是因为路径没有定义详细. 应 ...
- 《学习OpenCV》课后习题解答7
题目:(P105) 创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect:称结构体为"my_struct". a. 写两个函数:void Write_my_st ...
- 【Linux】Linux修改openfiles后不生效问题?
#次故障问题环境背景: Centos7.4物理机,升级过ssh和ntp: #一般只需要在此文件后面添加4行就行,配置后即可生效(exit再次登录即可生效),此次配置后没生效,reboot还是没生效,在 ...