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 ...
随机推荐
- ccf201703-2 STLlist
题目:http://118.190.20.162/view.page?gpid=T56 问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面, ...
- 接口和lambda表达式笔记
接口 接口是双方,即服务提供方和想让它们的对象对服务是可用的那些类,之间约定的一种机制. 声明一个接口 public interface IntSequence{ //不提供实现,则该方法为抽象方法, ...
- ajax同步和异步的切换
ajax为网页提供了非常不错的异步机制,但是有时候两个ajax放在一起,希望第一个完成后再继续第二个ajax的执行.这时候可以将第一个ajax代码带上同步参数即可,如下: $.ajax({ async ...
- centos7下安装elasticSearch错误总结(单节点模式)
1.首先确定你安装了jdk,版本需要1.8以上 2.上传elasticsearchjar包,只需配置一个文件即可 修改配置文件config/elasticsearch.yml network.h ...
- CSS里一个奇怪的属性
事情是这样的,在一个手机界面的制作中,我发现按钮点击后总会出现一个边框,于是开始搜索解决方案.搜到的解决方案是这样的. a:focus,input:focus{ -webkit-tap-highlig ...
- cocos2d-x 粒子系统
粒子系统是模拟自然界中的一些粒子的物理运动的效果,如烟雾,下雪,下雨,火,爆炸等. 粒子发射模式 粒子系统的发射模式的时候有两种方式:重力模式和半径模式. 粒子系统属性 属性名 行为 模式 d ...
- 多图片上传(base64方式传至后台)
<!DOCTYPE html><html><head> <meta http-equiv="X-UA-Compatible" conten ...
- 剑指offer-调整数组顺序使奇数位于偶数前面13
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. class Solu ...
- 链上链下交互 以太坊Dapp接口开发
主要是指的是用NodeJs调用 提供接口供前端使用 用户查询和转账 以太坊Dapp项目 众筹项目 功能需求 路人 查看所有众筹项目, 2 @ OK 根据众筹项目的address获取该众筹的详情 (参与 ...
- 测试理论--branch testing and boundary testing
1 branch testing 分支测试 测试代码的所有分支 2 boundary testing 测试 程序的限制条件