转摘自:http://blog.csdn.net/mxgsgtc/article/details/13005675

以前老是被从文本里读取文件,然后逐个的进行字符解析,感觉非常的慢,自从知道了fscanf函数之后,一切变的so easy!

fscanf函数用于从文本里读一个字符串到指定的数组里面:

  1. #include <stdio.h>
  2. #include <string.h>
  3. struct node{
  4. char a[20];
  5. char b[20];
  6. char c[20];
  7. char d[20];
  8. };
  9. int main()
  10. {
  11. FILE *fp;
  12. struct node buf;
  13. memset(&buf, 0x00, sizeof(buf));
  14. fp=fopen("1.txt", "r");
  15. fscanf(fp,"%[^,],%[^,],%[^,],%s",buf.a,buf.b,buf.c,buf.d);
  16. printf("[%s][%s][%s][%s]\n",buf.a,buf.b,buf.c,buf.d);
  17. return 0 ;
  18. }

这里面要注意的是 1.txt里面的内容是这样的 001data,DI,50,12345 没错,是用“,”号隔开的一些列字符串,以前我们在解析的时候是把这一行读出来,然后再一个一个字符解析,如果遇到“,”的话就分出一个字符串,但是fscanf一句话就搞定了,这里%[ ],是扫描集的意思,%[^,]其中^的意思就是当fscanf一个一个字符从文件读上来的时候如果遇到“,”字符就会停下来,就会把前面读取的字符存到buf中,比如 1.txt里的内容,fscanf会一次的读取001data 当他发现后面有“,”字符的时候就将001data存入buf.a中去了,也就是说^的意思是取反,就是遇到^后面的数就会停下来,那么,%[^,],%[^,]
这种连着的用法又是什么意思呢,注意,%[^,]  , %[^,]之间有个“,”,其实是这样的,先看一下一个小例子

  1. #include <stdio.h>
  2. #include <string.h>
  3. struct node{
  4. char a[20];
  5. char b[20];
  6. char c[20];
  7. char d[20];
  8. };
  9. int main()
  10. {
  11. FILE *fp;
  12. struct node buf;
  13. memset(&buf, 0x00, sizeof(buf));
  14. fp=fopen("1.txt", "r");
  15. fscanf(fp,"001d%s",buf.a);
  16. printf("[%s]\n",buf.a);
  17. return 0 ;
  18. }

这里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函数的应用的更多相关文章

  1. fscanf()函数基本用法

    FILE *fp; while(!feof(fp)) { fscanf(fp,"%s%d%lf",a,&b,&c);//这里%s对应的a不需要加上取地址符号& ...

  2. 《用格式化(fprintf和fscanf函数)的方式读写文件》

    //用格式化(fprintf和fscanf函数)的方式读写文件 [用格式化的方式向文件中写入数据]#include<stdio.h>#include<stdlib.h> int ...

  3. C库函数标准编程之fscanf()函数解读及其实验

    函数功能 fscanf()函数用于从参数stream的文件流中读取format格式的内容,然后存放到...所指定的变量中去.字符串以空格或换行符结束(实验1中会对它进一步说明) 函数格式 字符格式说明 ...

  4. fscanf函数的用法

    fscanf函数用法 简要介绍 fscanf()函数是格式化读写函数.它读取的对象是磁盘文件 函数原型: int fscanf(FILE * fp,char * format,...); 其中fp为文 ...

  5. 计算机二级-C语言-程序填空题-190115记录-fprintf()函数和fscanf()函数的使用。

    //给定程序,函数fun的功能是:将自然数1~10以及它们的平方根写到名为myflie3.txt的文本文件中,然后再顺序读出显示在屏幕上. //重难点:fprintf()函数和fscanf()函数的使 ...

  6. PHP fscanf() 函数

    定义和用法 fscanf() 函数根据指定的格式对来自打开的文件的输入进行解析. 语法 fscanf(file,format,mixed) 参数 描述 file 必需.规定要检查的文件. format ...

  7. fscanf函数

    函数定义: int fscanf( FILE *stream, const char *format [, argument ]... ); 以下是csdn的样例: /* FSCANF.C: This ...

  8. 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)

    函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...

  9. C++之函数fgetc和fputc、fgets和fputs、fread和fwrite、fscanf和fprintf用法小结

    #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int ...

随机推荐

  1. linux安装软件的几种方式(kali平台)和一些实用的软件(持续更新)

    安装软件前我们先更改镜像源,编辑 /etc/apt/sources.list 文件, 在文件最前面添加以下条目: #中科大更新源 deb https://mirrors.ustc.edu.cn/kal ...

  2. Android开发——View动画、帧动画和属性动画详解

    0. 前言   Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图 ...

  3. 4299: Codechef FRBSUM

    4299: Codechef FRBSUM https://www.lydsy.com/JudgeOnline/problem.php?id=4299 分析: 主席树. https://blog.se ...

  4. 「日常训练」Our Tanya is Crying Out Loud (CFR466D2B)

    题意(Codeforces 940B) 对一个数字$x$,你有两个决策:花费$A$减一.或花费$B$除以$k$(但必须可以除尽).问使之到$1$的最少花费. 分析 贼鸡儿简单,但我花式犯蠢……如果除不 ...

  5. Zabbix_agentd 启动报错

    C:\zabbix>c:\Zabbix\zabbix_agentd.exe -i -c c:\Zabbix\zabbix_agentd.conf zabbix_agentd.exe [1144] ...

  6. 深挖 NGUI 基础 之UICamera (二)

    一.UI Camera作用 UICamera需要挂载在摄像机上才能发挥作用 UICamera仅负责 发送NGUI 事件 到 脚本所附加的摄像机中看得到的对象,比如我自定义了NGUI层(在Inspect ...

  7. 《机器学习实战》 in python3.x

    机器学习实战这本书是在python2.x的环境下写的,而python3.x中好多函数和2.x中的名称或使用方法都不一样了,因此对原书中的内容需要校正,下面简单的记录一下学习过程中fix的部分 1.pr ...

  8. Turtle模块,一个超精简但功能齐全的绘图包

    先上官方链接https://docs.python.org/3.3/library/turtle.html 再上一个GitHub上别人做的一个小程序,画小猪佩琦的,里面用到了大量常用的turtle接口 ...

  9. 解决:Unable to execute dex: GC overhead limit exceeded

    转自http://blog.sina.com.cn/s/blog_6e334dc70101hnug.html Android打包时下面的错误: Unable to execute dex: GC ov ...

  10. VC中结构体的内存布局

    看了 VC++中内存对齐 这篇文章,感觉说复杂了,根据我的总结,要算出结构体的内存大小和偏移量,只要清楚结构体各成员的内存布局就行了,下面介绍一下我总结的规则,有不对之处,欢迎回复. 1.实际PACK ...