您现在的位置是:首页 > 数码 > 

C语言fgets()与fputs()详解

2025-07-21 06:05:03
C语言fgets()与fputs()详解 文章目录fgets()与fputs()1⃣️fgets()优缺点:2⃣️fgets()返回值:⃣️fgets()操作实例:⃣️fgets()操作进阶: fgets()与fputs() fgets()函数的第二个参数指明了读入字符的最大数量。如果该参数为n,那么fgets函

C语言fgets()与fputs()详解

文章目录
    • fgets()与fputs()
      • 1⃣️fgets()优缺点:
      • 2⃣️fgets()返回值:
      • ⃣️fgets()操作实例:
      • ⃣️fgets()操作进阶:

fgets()与fputs()

  • fgets()函数的第二个参数指明了读入字符的最大数量。如果该参数为n,那么fgets函数将读入n-1个字符。如果fgets()函数读到一个换行符,会把它储存在字符串中。这点与gets不同,gets会丢弃换行符。fgets()函数的第三个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin作为参数。
  • fputs()函数的第二个参数指明他要写入的文件。如果要在计算机显示器上打印,则使用stdout作为参数。与puts()函数不同,fputs()函数不会在待输出字符串末尾添加一个换行符。

例:

#include <stdio.h>
#define LE 14
int main(void){char words[LE];puts(Enter a String);fgets(words,LE, stdin);puts(words);  //puts()函数会添加换行符\nfputs(words, stdout);return 0;}


输入apple后,apple\n\0 被存储在数组中。
我们看到控制台输出的内容发现输出的两个apple之间有一行空白,因为puts()函数会添加换行符\n。

1⃣️fgets()优缺点:

fgets()储存换行符有好有坏

  1. 缺点是你可能并不想把换行符储存在字符串中,这样的换行符会带来一些麻烦。
  2. 优点是对于储存的字符串而言,检查末尾是否有换行符可以判读是否读取了一整行。如果不是一整行,要处理好一行中剩下的字符。
2⃣️fgets()返回值:

读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回ULL。

下面的程序验证读到文件结尾返回ULL。读入并显示用户输入的内容,直到fgets()读到文件结尾或空行(即,首字符为换行符)。

⃣️fgets()操作实例:
#include <stdio.h>
#define LE 10
int main(void){char words[LE];puts(Enter Strings (empty line to quit): );while(fgets(words, LE, stdin) != ULL && words[0] != 	\n	){fputs(words, stdout);}puts(Done!);return 0;}


LE设置的为10,所以fgets()一次读取9个字符(剩余一个字符留给’\0’),第一次读取到 I’m Kevin ,并存储为I’m Kevin\0,接着fputs()打印出来,并且没有换行。然后while进入下一轮迭代,fgets()继续读取,第二次读取到“ ,from Chi ,并存储为,from Chi\0,接着fputs()打印出来,并且没有换行。直到读取完所有字符为止。最后一次输入时,直接键入回车,所以跳出while循环,程序结束并打印Done!

⃣️fgets()操作进阶:

如果说我们想第一次的输入 “I’m Kevin,from China.” 只读取前9个字符,然后丢弃掉其他的字符,第二次输入也是如此,那该怎么办???
换句话说该想法就是:按照设定的大小读取输入行,并删除储存在字符串中的换行符,如果没有换行符,则丢弃数组装不下的字符。
再拆分成小的问题则就是以下的两个问题:

  1. 那如果不希望把换行符储存在字符串中,如何处理掉换行符呢??
    我们可以在已储存的字符串中查换行符,并将其替换为空字符:
while(words[i] != 	n	 ) {i;}
words[i] = 	\0\;
  1. 如果仍然有字符串留在输入行怎么办??
    丢弃掉其余的字符串即可。
    详细原理可以查看主页文章《C语言 getchar()原理及易错点解析》
while(getchar() != 	\n	)continue;

我们把这两个问题整合到上面的代码中:

#include <stdio.h>
#define LE 10
int main(void){char words[LE];puts(Enter Strings (empty line to quit): );while(fgets(words, LE, stdin) != ULL && words[0] != 	\n	){int i=0;while(words[i] != 	\n	 && words[i] != 	\0	){i;}if(words[i] == 	\n	){words[i] = 	\0	;}else{while(getchar() != 	\n	)continue;}puts(words);}puts(Done!);return 0;}

   while(words[i] != 	\n	 && words[i] != 	\0	){i;}

这段代码说的是,遍历字符串,直至遇到换行符或者空字符。如果先遇到换行符,下面的if语句将其换成空字符;如何先遇到空字符,else就将输入行舍弃。

注意⚠️:空字符与空格不一样!!!!空字符是’ \0 ,ASCII码为0;空格的ASCII为2. 下面程序可以验证:

#include <stdio.h>
void main()
{char a=	 	;char b=	\0	;printf (%d\n,a);printf (%d\n,b);}

Output:

2
0

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/800201.html

相关标签:无
上传时间: 2024-01-14 06:58:22
留言与评论(共有 9 条评论)
本站网友 什么是大v
24分钟前 发表
如果不是一整行,要处理好一行中剩下的字符
本站网友 伯克纳
5分钟前 发表
LE
本站网友 神经衰弱的治疗方法
4分钟前 发表
如果fgets()函数读到一个换行符,会把它储存在字符串中
本站网友 脚本错误
12分钟前 发表
例: #include <stdio.h> #define LE 14 int main(void){char words[LE];puts(Enter a String);fgets(words
本站网友 第一产业增加值
9分钟前 发表
优点是对于储存的字符串而言,检查末尾是否有换行符可以判读是否读取了一整行
本站网友 大港油田二手房
26分钟前 发表
LE
本站网友 深入浅出mfc
0秒前 发表
然后while进入下一轮迭代,fgets()继续读取,第二次读取到“
本站网友 美容培训学院
2分钟前 发表
优点是对于储存的字符串而言,检查末尾是否有换行符可以判读是否读取了一整行