C语言fgets与fscanf功能及用法对比分析是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计928个文字,预计阅读时间需要4分钟。
C语言中,fgets和fscanf的区别详解:
一、作用和用途上的大体区别:
+ fgets:从文件中读取一行数据存入缓冲区,遇到换行符或EOF结束。+ fscanf:从文件中读取格式化的数据,根据格式指定符解析数据。
二、fgets详解:
+ fgets从文件中读取一行数据存入缓冲区,遇到换行符或EOF结束。+ fgets会自动处理空格和换行符,不会将它们存储在缓冲区中。+ fgets读取的数据长度不超过指定的缓冲区大小减1。+ fgets读取的数据以null字符结尾。
三、fscanf详解:
+ fscanf从文件中读取格式化的数据,根据格式指定符解析数据。+ fscanf可以指定读取的数据类型,如整数、浮点数、字符串等。+ fscanf可以指定读取的数据数量,如读取一个整数、两个浮点数等。+ fscanf读取的数据不会存储在缓冲区中,而是直接解析成相应的数据类型。
四、总结:
fgets和fscanf在读取文件数据方面有各自的特点和用途。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[]),并结束本次读取。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文共计928个文字,预计阅读时间需要4分钟。
C语言中,fgets和fscanf的区别详解:
一、作用和用途上的大体区别:
+ fgets:从文件中读取一行数据存入缓冲区,遇到换行符或EOF结束。+ fscanf:从文件中读取格式化的数据,根据格式指定符解析数据。
二、fgets详解:
+ fgets从文件中读取一行数据存入缓冲区,遇到换行符或EOF结束。+ fgets会自动处理空格和换行符,不会将它们存储在缓冲区中。+ fgets读取的数据长度不超过指定的缓冲区大小减1。+ fgets读取的数据以null字符结尾。
三、fscanf详解:
+ fscanf从文件中读取格式化的数据,根据格式指定符解析数据。+ fscanf可以指定读取的数据类型,如整数、浮点数、字符串等。+ fscanf可以指定读取的数据数量,如读取一个整数、两个浮点数等。+ fscanf读取的数据不会存储在缓冲区中,而是直接解析成相应的数据类型。
四、总结:
fgets和fscanf在读取文件数据方面有各自的特点和用途。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[]),并结束本次读取。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

