scanf、getchar、gets

来源:互联网 发布:c语言实现http请求 编辑:程序博客网 时间:2024/05/22 05:39

  C语言中基本输入主要有三个函数:scanf、getchar、gets。
  首先他们的输入都是基于缓冲区的,字符被放入缓冲区,然后输入函数去取,取的时候就有区别了,关键是对空格和回车符的处理不大一样。
  

int main(){    char a,b;    scanf("%c",&a);    scanf("%c",&b);    printf("%d %d",a,b);    return 0;}

  这个程序执行输入a 后按回车的话程序会即刻结束输出97 ,10,第二个scanf不会执行,因为输入函数是从缓冲区去取,而scanf对回车符的处理是不会清除,所以下一个scanf就接收到了这个回车符,这里10就是回车符的ascii码。

  但是接收字符串的时候,scanf函数又会清除回车符。

  当需要接收hello world 这两个单词的时候,需要考虑中间的空格,因为scanf函数结束的标志是空格、回车、缩进符。scanf会遇到空格结束,所以只能接收到hello,这里可以用gets函数,它可以接收空格,以回车符结束,并且会舍弃最后的回车符!

  getchar是以回车符结束,我试了一下getchar是接收缓冲区第一个字符,包括空格和回车符。
  这也就是有时候用getchar()来暂停函数的时候它直接运行过去了并没有暂停的效果,这可能就是缓冲区里残留的回车符导致的。
  C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
这个函数是fflush(stdin)。

原创粉丝点击