C语言中fgets和fscanf区别详解

 更新时间:2017年10月30日 08:33:54   作者:CSDN_LQR  
这篇文章主要介绍了C语言中fgets和fscanf区别详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

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语言中单链表的基本操作(创建、销毁、增删查改等)

    C语言中单链表的基本操作(创建、销毁、增删查改等)

    这篇文章主要介绍了C语言中单链表的基本操作(创建、销毁、增删查改等),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C语言实现考勤管理系统

    C语言实现考勤管理系统

    这篇文章主要为大家详细介绍了C语言实现考勤管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++中模板和STL介绍详解

    C++中模板和STL介绍详解

    今天小编就为大家分享一篇关于C++模板和STL的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-09-09
  • C++结构体字节对齐示例

    C++结构体字节对齐示例

    这篇文章主要为大家介绍了C++结构体字节对齐示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • VC++创建msi文件的方法

    VC++创建msi文件的方法

    这篇文章主要介绍了VC++创建msi文件的方法,对于应用程序的开发有一定的借鉴价值,需要的朋友可以参考下
    2014-07-07
  • Qt实现手动切换多种布局的完美方案

    Qt实现手动切换多种布局的完美方案

    通过点击程序界面上不同的布局按钮,使主工作区呈现出不同的页面布局,多个布局之间可以通过点击不同布局按钮切换,支持的最多的窗口为9个,不同布局下窗口数随之变化,这篇文章主要介绍了Qt实现手动切换多种布局的完美方案,需要的朋友可以参考下
    2024-07-07
  • C++中STL的优先队列priority_queue详解

    C++中STL的优先队列priority_queue详解

    这篇文章主要介绍了C++中STL的优先队列priority_queue详解,今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中扒出了它的实现代码,需要的朋友可以参考下
    2023-08-08
  • C++实现读取图片长度和宽度

    C++实现读取图片长度和宽度

    这篇文章主要介绍了C++实现读取图片长度和宽度,本文直接给出实现代码,需要的朋友可以参考下
    2015-04-04
  • C语言菜鸟基础教程之for循环

    C语言菜鸟基础教程之for循环

    c语言中的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句.
    2017-10-10
  • C语言实现数字雨效果

    C语言实现数字雨效果

    这篇文章主要为大家详细介绍了C语言实现数字雨效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02

最新评论