fgets

百度百科:从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中。每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),假设文件里的该行,不足bufsize个字符,则读完该行就结束。如若该行(包含最后一个换行符)的字符数超过bufsize-1,则fgets仅仅返回一个不完整的行,可是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来推断函数是否是出错而终止的,应该借助feof函数或者ferror函数来推断。

函数原型:
     char *fgets(char *buf, int bufsize, FILE *stream);
     *buf:
字符型指针。指向用来存储所得数据的地址。
     bufsize: 整型数据,指明存储数据的大小。
     *stream:
文件结构体指针,将要读取的文件流。

    返回值:
成功,则返回第一个參数buf;
      在读字符时遇到end-of-file,则eof指示器被设置,假设还没读入不论什么字符就遇到这样的情况,则buf保持原来的        内容。返回NULL;
      假设发生读入错误。error指示器被设置,返回NULL。buf的值可能被改变。


     <strong>例(fgets()函数举例):</strong>
假设一个文件的当前位置的文本例如以下
Love, I Have
Since you can do it.
假设用fgets(str1,6,file1);去读取
则运行后str1 = "Love," ,读取了6-1=5个字符
这个时候再运行fgets(str1,20,file1)则运行后str1 = " I Have\n"
而假设
fgets(str1,23,file1);
则运行str1="Love ,I Have"。读取了一行(包含行尾的'\n',并自己主动加上字符串结束符'\0'),当前文件位置移至下一行。 尽管23大于当前行上字符总和,但是不会继续到下一行。 而下一次调用fgets()继续读取的时候是从下一行開始读。

sscanf

百度百科:sscanf() - 从一个字符串中读进与指定格式相符的数据。


         
函数原型:
 int sscanf( const char *,
const char *, ...);
 int sscanf(const char *buffer,const char *format,[argument ]...);
 
 buffer存储的数据。
format格式控制字符串。

 argument:
选择性设定字符串。
 sscanf会从buffer里读进数据。按照format的格式将数据写入到argument里。

返回值:
成功则返回參数数目。失败则返回-1,错误原因存于errno中。
           经多次測试,在linux系统中成功返回的是所有參数值减2,比如:sscanf("1
2 3","%d %d %d",buf1, buf2, buf3); 成功调用返回值为3,即buf的数量(总參数个数减前两个)。(注意:此处buf均为地址)

样例:
1. 常见使用方法。

char buf[512];

sscanf("123456","%s",buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!

printf("%s\n",buf);

结果为:123456

   2. 取指定长度的字符串。

如在下例中,取最大长度为4字节的字符串。

sscanf("123456","%4s",buf);

printf("%s\n",buf);

结果为:1234

   3. 取到指定字符为止的字符串。如在下例中。取遇到随意小写字母为止的字符串。

sscanf("123456abcdedf","%[^a-z]",buf);

printf("%s\n",buf);

结果为:123456

   4. 取仅包括指定字符集的字符串。

如在下例中。取仅包括1到9和小写字母的字符串。

sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);

printf("%s\n",buf);

结果为:123456abcdedf

当输入:  sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);

printf("%s\n",buf);

结果为:123456

   5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

sscanf("123456abcdedfBCDEF","%[^A-Z]",buf);

printf("%s\n",buf);

结果为:123456abcdedf

   6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串。

先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中

sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);

printf("%s\n",buf);

结果为:12DDWDFF

   7、给定一个字符串“hello, world”,仅保留world。

(注意:“。”之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)

sscanf(“hello, world”,"%*s%s",buf);

printf("%s\n",buf);

结果为:world

%*s表示第一个匹配到的%s被过滤掉,即“hello,”被过滤了

假设没有空格则结果为NULL。



综合举例:

#include <stdio.h>
#include <stdlib.h> int main(void)
{
char buf[256];
int size; printf("please input array size:");
fgets(buf,256,stdin);// stdin是从键盘输入
sscanf(buf,"%d",&size);
printf("The size of array is :%d",size);//结果就是你输入的值咯<img alt="得意" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/proud.gif" />
return 0;
}




fgets()函数和sscanf()函数的使用方法的更多相关文章

  1. C语言sprintf与sscanf函数

    1.前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来.从给定的字符串中提取相关内容,例如给定一个地址:http://www.bo ...

  2. C语言sprintf与sscanf函数[总结]

    sprintf函数 sprintf函数原型为 int sprintf(char *str, const char *format, ...).作用是格式化字符串,具体功能如下所示: (1)将数字变量转 ...

  3. 关于sscanf函数的各种详细用法

    看书的时候碰到sscanf函数,就上网查了很多资料,并加以自己的整理,希望对大家有所帮助. (因为参考的博客太多太散,就不一一注明,望大神们见谅) sscanf()  :从一个字符串中读进与指定格式相 ...

  4. sscanf函数详解 & 查找文件字符串

    1. sscanf函数 sscanf() - 从一个字符串中读进与指定格式相符的数据. 1.1 函数原型 int scanf(const char *format, ...); int fscanf( ...

  5. python 内置函数 lamda表达式。 open 文件方法

    lamda 表达式 lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 普通的条件语句 if 1 == 1: name = 'kaixin' else: ...

  6. sscanf()函数的使用及其实例

    资料引自: 传送门 sscanf函数原型: Int sscanf( const char * src, const char * format, ...); int scanf( const char ...

  7. sscanf函数

    sscanf函数用法举例 #include <stdio.h> #include <string.h> #define N 512 int main() { char buf[ ...

  8. c语言 sscanf()函数

    sscanf()函数用于从字符串中读取指定格式的数据,其原型如下:    int sscanf (char *str, char * format [, argument, ...]); [参数]参数 ...

  9. sscanf函数和正则表达式

    看了几篇介绍sscanf函数,真是发现自己好多东西没理解透,详细介绍使用在sscanf中使用正则表达式. 第一篇: 此文所有的实验都是基于下面的程序: char str[10]; for (int i ...

随机推荐

  1. Android平台下的TCP/IP传输(客户端)

    在工科类项目中,嵌入式系统与软件系统或后台数据库之间的信息传输是实现“物联网”的一种必要的途径,对已简单概念的物联网,通常形式都是一个单片机/嵌入式系统实现数据的采集及其处理,通过蓝牙,wifi或者是 ...

  2. js与jquery基础知识对比(一)---2017-05-06

    用表格做的,想要对比的内容一目了然,红色部分为重点   js jquery 取元素 id: document.getElementById("aa"); 取到的是dom对象 cla ...

  3. HDU 3018 一笔画问题

    题意:给你一个图 判断最少用几笔把这个图画出来(画过的边不能重新画) 思路: 并查集+欧拉回路 仔细想一想. 在一个强连通分量中 所有度为奇数的点之和÷2就是要画的笔画数 Now question : ...

  4. Solr.NET快速入门(七)【覆盖默认映射器,NHibernate集成】

    覆盖默认映射器 默认情况下,SolrNet使用属性映射Solr字段. 但是,您可能需要使用另一个映射程序. 替换默认映射器取决于您如何设置库: 内置容器 如果使用默认的内置容器,可以在调用Startu ...

  5. C#服务控件UpdatePanel的局部刷新与属性AutoPostBack回传

    C#服务控件许多都有AutoPostBack这一属性(AutoPostBack意思是自动回传,也就是说此控件值更改后是否和服务器进行交互),如下代码所示: protected void Textbox ...

  6. IOS-UITextField-改变光标颜色

    方法1: [[UITextField appearance] setTintColor:[UIColor blackColor]]; 这种方法将影响所有TextField. 方法2: textFiel ...

  7. WebForm--j简单控件、简单的登录(怎么链接数据库)

    一.简单控件 1.label:边框(边框的颜色.样式.粗细)  是专门显示文字的,   被编译后是    <span id="Label1">Label</spa ...

  8. Android 通用Dialog中设置RecyclerView

    通用Dialog public class IOSRecyclerViewDialog{ private Context context; private Dialog dialog; private ...

  9. @section Scripts{}的使用

    MVC视图中,Javascripts代码被放于下面的Razor代码中(@section Scripts{}). 好处:在视图进行JavaScript编程时,是一个很好的实践,在共享视图(_Layout ...

  10. Vmware安装Linux系统的vmware-tools

    我们应对都用vmware虚拟机,如果虚拟机是windows系统,每次虚拟机下方提示安装vmware-tools时,我们只需要点击安装即可. 但如果虚拟机安装的是linux系统的时候,发现就没一样了. ...