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语言中const和C++中的const 区别详解,包括了C语言中const和C++中的const 区别详解的使用技巧和注意事项,需要的朋友参考一下 C语言中const和C++中的const 区别详解 C++的const和C语言的#define都可以用来定义常量,二者是有区别的,const是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有
本文向大家介绍浅谈C语言=与==的区别详解,包括了浅谈C语言=与==的区别详解的使用技巧和注意事项,需要的朋友参考一下 在 C 语言中,最容易产生混淆的操作符要属“=”与“==”。其中,“=”并不等于符号,而是赋值操作符,如 x=3。除此之外,还可以在一个语句中向多个变量赋同一个值,即多重赋值。例如,在下面代码中把 0 同时赋给 x、y 与 z。 相对于只有一个等号的赋值操作符,关系操作符中的等于
本文向大家介绍C语言和C++的6点区别,包括了C语言和C++的6点区别的使用技巧和注意事项,需要的朋友参考一下 C语言和C++的区别 (1)面向过程语言和面向对象语言 C语言是面向过程语言,即先分析出解决问题的步骤然后再将这些步骤一一实现 C++是面向对象语言,即把问题分成若干个对象,目的是为了描述某个事物在解决整个问题的步骤中的行为 (2)关键字不同 C语言中有32个关键字,而C++有63个关键
本文向大家介绍详解C语言中getgid()函数和getegid()函数的区别,包括了详解C语言中getgid()函数和getegid()函数的区别的使用技巧和注意事项,需要的朋友参考一下 C语言getgid()函数:取得组识别码函数 头文件: 定义函数: 函数说明:getgid()用来取得执行目前进程的组识别码。 返回值:返回组识别码 范例 执行: C语言getegid()函数:获得组识别码 头文
本文向大家介绍Go语言中new()和 make()的区别详解,包括了Go语言中new()和 make()的区别详解的使用技巧和注意事项,需要的朋友参考一下 概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似。不过解释两者之间的不同也非常容易。 new 的主要特性 首先 new 是内建函数,你可以从 http://golang.org/pkg/builtin/#n
本文向大家介绍Java和C语言之间的区别,包括了Java和C语言之间的区别的使用技巧和注意事项,需要的朋友参考一下 Java和C都是编程世界中最流行的编程语言,由于它们的各种重要特征和特性,这两种语言都在全球范围内被广泛使用。 根据它们的功能,以下是Java和C之间的重要区别 序号 键 爪哇 C 1 介绍了 Java是在引入年份之后以C语言开发的,它是由James Gosling在1995年开发的