scanf()、gets()、getchar()函数的学习笔记

一、 scanf()

1. scanf()函数可以读入单个字符,如果想连续读入两个单个字符则易出错。

char c1,c2;

scanf("%c",&c1);

scanf("%c",&c2);

printf("%c",c1);

printf("%c",c2);

当从终端输入a、回车时,程序就已经执行完了。

原因:scanf()是从输入流缓冲区中取数据,在scanf()取数据前,输入流缓冲区中已经有a和回车两个字符了,因此第二个scanf()函数直接读取了回车值。

2. scanf()函数读入字符串时,遇到空格、回车、TAB时会认为输入结束,而且不会讲空格、回车、TAB键读入或进行转换,因此这些字符还继续停留在输入流缓冲区中。

因此输入有空格、回车时要谨慎使用scanf()函数。

二、gets()

scanf()函数无法读入空格,而gets()函数则可以。

gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串

使用strlen()求gets()函数读取的字符串长度时,最后的null值(即‘\0’)不计算在内。

三、getchar()

getchar()函数从输入流中获取一个字符,回车符不会被读入或转换而是继续停留在输入流缓冲区中。

-------------------------------------

因此,为了避免输入流缓冲区中垃圾数据对后续读入的影响,需要清空缓冲区。

方法一:使用函数fflush(stdin)

方法二:scanf("%[^\n]",string)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值