C语言中scanf、gets、fgets的区别

1.scanf会读取标准输入缓冲区中的输入行内容直到遇到回车或空白(回车、tab、空格)以换行为例,会把换行符之前的数据全部读入到scanf指定的变量中,回车(\n)依然保存

在缓冲区中,等待下次读取标准输入缓冲区

遇到上面这种情况一般需要加入一下代码来清空缓存区的行


/*
     这里getchar()从缓冲区中读一个字符,直到读取到回车结束,由于getchar()没有设置变量保存读取的字符,所以读取的字符全部被抛弃,这样就把一行内容全部清空了(回车前面的内容包括回车)
*/
while(getchar() != '\n')
         continue;


2.gets只有在遇到回车时才会把缓冲区中的内容全部读出了,然后去掉回车(\n)把回车前的内容全部写到变量中


3.fgets使用来处理文件的,不过可以设置文件指针是stdin(标准输入,一般指键盘),它在读取标准输入时在遇到回车时会直接回车之前包括回车都读出到指定的变量中

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
scanfgets都是C语言常用的输入函数,但它们在使用上有一些区别scanf是格式化输入函数,可以按指定的格式从标准输入流(通常是键盘)读取数据。它的使用方式是通过格式字符串来指定输入的数据类型和格式,并且可以使用多个格式字符串来读取多个输入。例如,可以使用"%d"来读取一个整数,"%f"来读取一个浮点数,"%s"来读取一个字符串等。scanf函数会跳过输入的空格、制表符和换行符,直到读取到有效的输入为止。然而,scanf函数存在一些安全性问题,因为它无法控制输入的长度,可能导致缓冲区溢出。 gets是一种不安全的输入函数,它可以从标准输入流读取一行字符串,并将其存储在指定的字符数组gets函数会读取输入的所有字符,包括空格、制表符和换行符,直到遇到换行符为止。然而,gets函数没有办法检查输入数据的长度,可能导致缓冲区溢出。因此,在实际使用,不推荐使用gets函数。 为了更安全地读取字符串,推荐使用fgets函数。fgets函数可以指定读取的最大字符数,避免了缓冲区溢出的问题。使用fgets函数时,需要注意将换行符也纳入考虑,因为它会被读取到并存储在字符串。 综上所述,scanfgets的主要区别在于输入方式和安全性。scanf是格式化输入函数,gets是一次性读取一行字符串的函数,而fgets是更安全的读取字符串函数。在实际使用,应尽量避免使用不安全的输入函数gets

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值