fgets和fscanf区别

来源:互联网 发布:。是什么意思网络语言 编辑:程序博客网 时间:2024/06/08 01:54

一、作用上的大概区别:

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

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

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

我爱你小白 开玩笑哈哈开玩笑
  • 1
  • 2
  • 3

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);//注意最后关闭文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行结果: 
这里写图片描述

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

FILE *f1 = fopen("a.txt", "r");//只读方式打开a.txtFILE *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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行结果: 
这里写图片描述

三、结论

1、fgets遇到“空格”就跟遇到平常的字符一样读取,遇到“回车”则结束本次读取,最后往缓冲区(char *buf[])的最后加多一个"\0"表示本次读取一行结束。2、fscanf不论遇到“空格”还是“回车”,都当作'\0'读取到缓冲区中(char  *buf[]),并结束本次读取。
原创粉丝点击