C语言中fgets和fscanf区别详解

所属分类: 软件编程 / C 语言 阅读数: 73
收藏 0 赞 0 分享

C语言中fgets和fscanf区别详解

一、作用上的大概区别:

①fgets:从文件中读取一行数据存入缓冲区(fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往缓冲区写多一个\0,所以它是读一行数据)

②fscanf:从文件中读取一段数据存入缓冲区(fscanf遇到空格或回车就结束,它会把空格或回车转换为\0,所以它是读一小段数据)

二、举个例子:把a.txt文件中的内容复制到b.txt。

a.txt中的内容(第一行中“我爱你小白”和“开玩笑”中间有个空格,每行的最后都有回车):

我爱你小白 开玩笑
哈哈
开玩笑

1、使用fgets读取a.txt文件并写入到b.txt的程序片段:

FILE *f1 = fopen("a.txt", "r");//只读方式打开a.txt,该文件必须存在
FILE *f2 = fopen("b.txt", "w");//以只写方式打开b.txt,该文件可以不存在
if (f1 == NULL)//如果文件不存在,直接结束
{
  return 0;
}
char buf[1024] = { 0 };//缓冲区
while (!feof(f1))
{
  memset(buf, 0, sizeof(buf));//清空缓冲区
  fgets(buf, sizeof(buf), f1);//从文件中读取一行数据存入缓冲区(fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往缓冲区写多一个\0,所以它是读一行数据)
  fputs(buf, f2);
}

fclose(f1);//注意最后关闭文件
fclose(f2);//注意最后关闭文件

运行结果:

2、使用fscanf读取a.txt文件并写入到b.txt的程序片段:

FILE *f1 = fopen("a.txt", "r");//只读方式打开a.txt
FILE *f2 = fopen("b.txt", "w");//以只写方式打开b.txt,该文件可以不存在
if (f1 == NULL)//如果文件不存在,直接结束
{
  return 0;
}
char buf[1024] = { 0 };//缓冲区
while (!feof(f1))
{
  memset(buf, 0, sizeof(buf));//清空缓冲区
  fscanf(f1, "%s", buf);//从文件中读取一段数据存入缓冲区(fscanf遇到空格或回车就结束,它会把空格或回车转换为\0,所以它是读一小段数据)
  fputs(buf, f2);
}

fclose(f1);//注意最后关闭文件
fclose(f2);//注意最后关闭文件

运行结果:

三、结论

1、fgets遇到“空格”就跟遇到平常的字符一样读取,遇到“回车”则结束本次读取,最后往缓冲区(char *buf[])的最后加多一个"\0"表示本次读取一行结束。

2、fscanf不论遇到“空格”还是“回车”,都当作'\0'读取到缓冲区中(char *buf[]),并结束本次读取。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

C++中四种对象生存期和作用域以及static的用法总结分析

以下是对C++中四种对象生存期和作用域以及static的用法进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++嵌套类与局部类详细解析

从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定
收藏 0 赞 0 分享

C++空类详解

以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++之友元:友元函数和友元类详解

友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元
收藏 0 赞 0 分享

C++中返回指向函数的指针示例

int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针,所指向的函数返回int型并带有两个分别是Int*和int型的形参
收藏 0 赞 0 分享

C数据结构之单链表详细示例分析

以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C数据结构之双链表详细示例分析

以下是对c语言中的双链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅析如何在c语言中调用Linux脚本

如何在c语言中调用Linux脚本呢?下面小编就为大家详细的介绍一下吧!需要的朋友可以过来参考下
收藏 0 赞 0 分享

深入解析unsigned int 和 int

以下是对unsigned int和int进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅谈C++中的string 类型占几个字节

本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节
收藏 0 赞 0 分享
查看更多